Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

Sql

SQLのINとEXISTSの違い

Sql

ユーザーテーブルと、そのユーザーが好きなプログラミング言語というテーブルがあるとします。 ユーザーテーブル(UserTable) id name 1 山田 2 村上 3 中村 好きなプログラミング言語テーブル(FavLangTable) id user_id lang 1 1 Python 2 1 PHP 3 2 TypeScr…

CASE-WHENでWhere句を動的に組み立てる

Sql

kuniku.hatenadiary.jp日付で挟む時に、解約日があれば開始日〜解約日、なければ開始日〜終了日で挟みたいという事を実現するのに、ビューを作る必要があった。CASE-WHEN、幅が広い。 WHERE startdate >= curdate() AND curdate() <= ( CASE WHEN cancelDate…

決算期で集計する場合は、決算月だけマイナスすればいい

Sql

3月決算の会社の場合、4月〜翌月3月までが1年という単位になる。これをCASE句でまとめるのはツライ。同じ年度であることさえわかればGroupByできる。4月1日〜翌3月31日を1年としたいなら、現在の日付から3ヶ月マイナスすればやっていける。2018年1月〜3月か…

売上を顧客の締日で集計するSQLを簡単に書く方法

Sql

SQLそれ自体は一番最後にあります。detail.chiebukuro.yahoo.co.jp天才的なソリューションだった。驚いた。日付から締日を引き算すれば、何月締めであるかを判定できるとは。シカクいアタマをマルくする必要性を痛感した。締日集計のめんどいところは、締日…

よく分かるFROM句の仕組み

Sql

例えば、こういう顧客テーブルを全件取得するSQLがあります。 SELECT * FROM customers 上記のSQLはこうやっても一緒です。 SELECT * FROM (SELECT * FROM customers) テーブルCustomersって要は全件取得した結果集合をFROMに設定してるんだよねっていうこと…

営業事務(マーケ担当)はSQLを覚えるべきだし、2時間で覚えられる。

Sql

qiita.comめっちゃええ話。これはすごく意味がある。細かいツッコミをすれば、上記はSQLを簡単に投げられるようになった話でありSQLを駆使できるようになったわけではないのだけど、そのうち覚えるやろ。弊社では商品企画を担当する社員がおりまして、Excel…

プログラミング未経験者がSQLの習得に挑戦するでござる

実妹と甥っ子が、SQLの習得に挑戦するでござる。 select itemcode, name, lot, price from items where itemcode like '%MA-080%' order by itemcode asc 元々はこんなSQLを書いているのを実妹が見ていて「これなら私でも出来そうだから教えて」と話が来た所…

UNION句を久しぶりに使ったのでメモ

Sql

テストデータを整備するのに、YというテーブルのIDを外部キーとして持っているA〜Dのテーブルのレコードを集めて1つの表にする必要がありました。こういう時はUNIONの出番です。 select zzz.id, zzz.name from ( selct y.id, y.name, from y_table as y joi…

SQLのFROM句はテーブルである必要はございません!

Sql

どうもそのように思っている方が多い気がしたので。FROM句に指定できるのはテーブルそのものではなく、SELECT文を発行した結果でも指定できます。派生テーブルという表現をすることが多いみたい。PostgreSQLのマニュアルでもそんなような事が書いてあります…

MySQLで履歴テーブルの最新を取りたい(Group ByとOrder By)

よくありますよね。履歴テーブルの最新を取りたいってやつ。履歴テーブルを顧客で集計して、その最新の履歴をゲットしたい。こういうやつだ。 select id, user_id, access_path, created from logs where year(created) = 2015 group by user_id order by id…

JOINで複数カラムを同一テーブルで結合したデータを出したい

Sql

注文テーブルに「作成者」「更新者」の2つのカラムがあります。そのテーブルの作成者と更新者にはユーザーテーブルのユーザーIDが入っているものとします。その作成者と更新者の氏名を、注文テーブルに連結して以下の様な一覧を作れないか、と。 作成者ID …

update文にcase句が使えるなんて知らなかった

Sql

いや、これはすごいな。 update books set price = CASE WHEN price < 250 then price * 1.5 ELSE price * 0.9 END; 見ての通りpriceが250円未満なら1.5をかけ、それ以外なら0.9をかけている。自己結合したい場合など、これを使えば結合しなくても良さそう。…

updateのsetでサブクエリ

Sql

サブクエリを使いたい時なんて、「別のテーブルから抽出した値をブチ込む or 条件にする」しかないよね。基本的に。ちなみにSELECT句でもサブクエリ使えるんだよね。面白いもんです。ググってもあんまりいいサンプルなかったんで、メモ代わりに書いておきます…