インターネットサービスはデータが命。LPだってUIだってデータがなくちゃPDCA回せない、でもGoogle Analiticsじゃわからないユーザーデータも参照したい。
そんなデザイナーにも出来るSQL。表現の仕方が間違ってても気にしない。理屈じゃないんだ、感覚でわかればOK!
##基本
###何をデータにするか決める: select
表示する結果のカラムを指定します。*だと全部。count(*)またはcount(1)で全体が何行あるのか、count(カラム名)で指定したカラムが何行あるのか表示します。
###どこからとるのか決める: from
データを取ってくるテーブルを書くところ。またはサブクえりを書くところ
###なにを条件にするのか決める: where
and とか or とか not とか
カラム名 = とか > とか <
おんなじカラムで複数とOKならin ('なにか','なにか','なにか')とか
to_cher()とか
ここまでわかればとりあえずデータは持って来れる。
byシリーズ
###order by
指定したカラム名で並び替える!デフォルトだと昇順!
group by
指定したカラム名でグループをつくって集計に備えます。いちいち指定してあげないとすぐ動かなくなる。めんどくさい。
##サブクエリ
jsのfunctionみたいな感じ。
下のイタリックの部分。
select
カラム
from
(select ~~ from ~~ where ~~ )
ここで色んな色んな条件をつけたサブクエリを用意して、セグメントしたデータが取れるようになる。あと、複数のテーブルからデータを持ってきて比較できる。すごい!
###union
サブクエリのデータをまとめて、一つのテーブルにまとめられる。
でも、selectでとってくるカラムとカラム数が合ってないとまとめてくれないから、
「0 as わかりやすいカラム名」とかでとりあえずカラムそろえるといい。
###inner join
from
サブクエリ1
inner join
サブクエリ2
みたいにサブクエリとサブクエリの間に使う。
カラム数関係なく、2つの表を比べて1と2で合致したものだけを残して表示してくれるすごいやつ。2つ以上にしてもいい。
###left join
from
サブクエリ1
left join
サブクエリ2
inner join と使い方にてるけど、結果が微妙に違う。
1と比較して2ににも当てはまる物を表示+2には当てはまらなかった1の要素も表示する。
例えば以下みたいなデータがあったとして、
クエリ1 | クエリ2 | クエリ3 | クエリ4 |
---|---|---|---|
A | A | A | |
B | B | ||
C | C | C | C |
D | D |
一つ左隣のデータと比較しながら返すので
クエリ1 | クエリ2 | クエリ3 | クエリ4 |
---|---|---|---|
A | A | ||
B | |||
C | C | C | C |
D | D |
こんな感じで出てくる。
##便利なやつ
###to_char('','')
引数の変換に使うやつ。
to_char(create_date,'yyyy-MM') = '2014-07'
これだと、create_dateのカラム内にある値を、yyyy-mmの書式で書き換えますよってなる。
なので ='2014-01'みたく月単位で指定するときに便利。
集計結果でも使える。
###case - when - then - else - end
case 参照したいカラム when 条件 then 結果 else それ以外の場合の結果 end
if elseみたいなやつ。
###sum()
計算するやつ
###row_number()
数字を付けるやつ
row_number() over(partition by itemid order by itemid)
row_numberが「順番に数字をつけるよ!」
overが「まてまて、数字付ける前に次の条件で区切ったり並び替えたりしようよ」
partition byが「次のカラムの値が同じやつで分けるよ」
order byが「次のカラム値で並び替えるよ」
っていうことで、同じitemidの中で1〜順番に数字が付いていく仕組み。