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件になる。
手元で条件指定して実行した場合、JOINと同じになった。

FULL JOIN ほぼ、総当たり。
条件指定不可。

 

■勘所

  • GROUP BY (和訳:グループ化)という名前だが、挙動はむしろ分割に近いかも。
  • GROUP BY を使わずに AVG(カラム名)を使うと結果が1件になるのは、分割していない(=1テーブル)の当該カラムの全レコード平均値になるため。
  • GROUP BY を使ってAVG(カラム名)を使うと、GROUP BY によってテーブルを分割した上で、各テーブルごとに、当該カラムのレコード平均値を計算する。