##GROUP BY
GROUP BYを用いると、データをグループ化することができます。「GROUP BY カラム名」とすることで、指定したカラムで、完全に同一のデータを持つレコードどうしが同じグループとなります。
グループ化するには、今までの集計関数を取得するFROMの後ろに「GROUP BY カラム名」を追加します。集計関数により、各グループごとにデータが集計されます。
※GROUP BYを用いる場合、SELECTで使えるのは、GROUP BYに指定しているカラム名と、集計関数のみです。
SELECT
関数(カラム),カラム1
FROM テーブル名
GROUP BY カラム1 ;
####複数の場合
SELECT
関数(カラム),カラム1,カラム2
FROM テーブル名
GROUP BY カラム1,カラム2;
####WHEREとGROUP BY
GROUP BYはWHEREとも併用することができ、その場合はWHEREの後に書きます。
WHEREとGROUP BYと集計関数は以下の順番で実行されていきます。WHEREはまず最初に、そのあとにGROUP BYと関数が実行されます。
SELECT
関数(カラム),カラム1,カラム2
FROM テーブル名
WHERE カラム = "文字"
GROUP BY カラム1,カラム2;
##HAVING
GROUP BYでグループ化したデータを更に絞り込みたい場合には、HAVINGを用います。「GROUP BY カラム名 HAVING 条件」のようにすることで、条件を満たすグループを取得することができます。
GROUP BY カラム
HAVING 条件;
####WHEREとHAVING
グループ化した後のデータを絞り込む際、WHEREではなくHAVINGを使うのは、SQLの各コマンドが以下の順番で実行されていくためです。WHEREはまず最初に、そのあとにGROUP BYと関数が実行され、その後にHAVINGが実行されます。
実行順序によって、WHEREとHAVINGは検索対象に違いがあります。WHEREはグループ化される前のテーブル全体を検索対象とするのに対し、HAVINGはGROUP BYによってグループ化されたデータを検索対象とします。
HAVINGはグループ化された後のテーブルから検索するため、条件文で使うカラムは必ずグループ化されたテーブルのカラムを使います。
SELECT
関数(カラム),カラム1,カラム2
FROM テーブル名
GROUP BY カラム1,カラム2
HAVING 関数(カラム) > 数値;