SQLの結合と集計関数
私事で恐縮ですが、自分がどれくらいSQL書けるのかをチェックする機会がありまして、自分でも引くくらい集約関数のこと忘れていたので、自分に向けての備忘メモとなります。
■ 集約で使う関数一式
関数名 | 機能 |
GROUP BY |
グループ化 |
SUM | GROUP BY でまとめたデータの合計 |
AVG | GROUP BY でまとめたデータの平均 |
MAX | GROUP BY でまとめたデータにおける最大値 |
MIN | GROUP BY でまとめたデータにおける最小値 |
COUNT | GROUP BY でまとめたデータの件数 |
HAVING | 集計結果に条件を追加したい場合に利用する |
■結合で使う関数一式
関数名 | 機能 |
JOIN | 別名 INNER JOIN。 条件に一致しないデータは消える。 |
LEFT JOIN | 別名 LEFT OUTER JOIN。 左テーブルはすべて表示。 条件が一致する右テーブルの値を取得。 条件が一致しない場合、NULL。 |
RIGHT JOIN | 別名 RIGHT OUTER JOIN。 LEFT JOIN の反対。 |
CROSS JOIN |
条件未指定の場合、ほぼ、総当たり。 レコード数10件のテーブル間で CROSS JOIN 場合、結果は100件になる。 |
FULL JOIN | ほぼ、総当たり。 条件指定不可。 |
■勘所
- GROUP BY (和訳:グループ化)という名前だが、挙動はむしろ分割に近いかも。
- GROUP BY を使わずに AVG(カラム名)を使うと結果が1件になるのは、分割していない(=1テーブル)の当該カラムの全レコード平均値になるため。
- GROUP BY を使ってAVG(カラム名)を使うと、GROUP BY によってテーブルを分割した上で、各テーブルごとに、当該カラムのレコード平均値を計算する。