第6章 グループ化
6.1 グループ分けして集計
「GROUP BY 列名」と指定することで、その列の内容によって行をグループ分けし、そのグループごとに集計関数を使用することができる。
SELECT 集計関数(列名) FROM テーブル名 GROUP BY グループ分けする列名;
例:hiごとにグループ分けし、kosu の合計を計算。
SELECT hi,SUM(kosu) FROM uriage GROUP BY hi;
- GROUP BY 指定時、SELECT で表示する列はGROUP BY で指定された列しか使えない(+集計関数)。
- GROUP BY はWHEREの後、ORDER BYの前に記述
- GROUP BY には複数の列を指定することが可能
6.2 集計結果に条件付け
集計結果に条件付けを行うには HAVING を用いる。
SELECT 関数(列名) FROM テーブル名 GROUP BY グループ分けする列名 HAVING 条件;
※条件はWHEREと同様の書き方
SELECT hi,SUM(kosu) from uriage GROUP BY hi HAVING SUM(kosu) > 5
hi によってグループ分けし、kosu の合計が5より大きいものを表示。
- HAVING は GROUP BY の直後に書く
HAVING と WHERE の違い
- WHERE :集計前に行を絞る
- HAVING:集計後に行を絞る
処理の順番はWHERE → 集計 → HAVING
よって、集計関数をWHERE句に使うことは出来ないが、HAVING句に使うことは出来る。