SQLレクチャー会/第9回~第29回
<<<複数の表を結合(JOIN)しよう>>>
そもそも、なぜデータが分割されているのかというところから説明してもらいました。
2つのテーブルを紐付けためのキーワードは`JOIN`
`A JOIN B ON A.id = B.a_id`のような構文
(「AとBのテーブルを紐付けるよ、Aのテーブルの`id`カラムとBのテーブルの`a_id`というカラムが等しいものを紐付けるよ」という意味)
JOINには種類があるよ
INNER JOIN:対応する先がなかったらその行は消す
{RIGHT, LEFT} OUTER JOIN:対応する先がなくても行は出す
セルフジョイン: 自分とJOINして、過去との比較をできるようにしよう
【感想】これ、このレクチャー会のきっかけになった「別なテーブル上にある複数のデータを結合する」ってめっちゃやりたい事に合致する~!となった部分です
この後、JOINの沼にはまって宿題の練習問題に2日かかったりしてゆきます…がんばれ!自分!!
<<<ウインドウ関数再来>>>
基本的な構文:
`ウィンドウ関数(...) OVER (PARTITION BY ... ORDER BY ... ROWS BETWEEN ... PRECEDING AND CURRENT ROW)`
`PARTITION BY`は`GROUP BY`のウィンドウ関数版だと思ってもらえばよい
`ORDER BY`はそのままだけど、並び換えられる範囲はグループ内であることに注意
`ROWS BETWEEN ... PRECEDING AND CURRENT ROW`はグループ内のデータに対してウィンドウ関数を適用するときの絞り込みっぽいことをしてくれる → `ウィンドウフレーム`と呼ばれるらしい
典型的なウィンドウフレームの例:
何も書かない(特に絞り込みは行なわないということ)
`ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW`(自分より前の行全部 + 自分自身の行)
`ROWS BETWEEN 11 PRECEDING AND CURRENT ROW`(自分より前11個に絞る + 自分自身の行)
頻出のウィンドウ関数:
`COUNT`:グループ内の行数を数える
`SUM`:グループ内の合計や累積和を取る
`ROW_NUMBER`:グループ内をソートして、順位を付ける
`LAG`:グループ内をソートして、前の行の値を取る
`LEAD`:グループ内をソートいて、後の行の値を取る
応用技その1:累積和
応用技その2:移動平均
<<<SQLの細かいテクニック>>>
複数のSQLの結果を縦にマージする(UNION ALL)
歯抜けになっているテーブルの値を埋めよう
【感想】1つ1つはフムフムと分かった気になるんですが、実際練習問題でやってみるとなかなか難しい…1個の練習問題にめっちゃ時間かかったけど、どうにかこうにか形にできて達成感!というサイクルを繰り返してました。
この後、SQLレクチャー会の最後10回くらいは、いろんな練習問題をやっていきました。
【感想】最終的には調べながらですが、どうにか自分でやりたい形のものを作ることができるようになりました!自身の装備が1つ増えた感じで嬉しい!!
参考図書:『10年戦えるデータ分析入門 SQLを武器にデータ活用時代を生き抜く』
【感想】SQLレクチャー会に誘ってもらわなかったら絶対目に触れなかった本だなと思います。
実際のレクチャー会はsyouさんが作ってくれたテキスト(めっちゃ分かりやすく簡単な文章で作ってくらた&実際のシチュエーション等盛り込んでくれた)で進めていきましたが、分からなくなった時に「syouさんテキスト」とこの本2つ調べる場所があるのは心強い!