【SQL】データのグループ化(GROUP BY・HAVING)
-
GROUP BY
GROUP BY カラム名:指定したカラムで、完全に同一のデータを持つレコード同士がグループになる
※SELECTで使えるのは、GROUP BYで指定しているカラム名と集計関数のみ
SELECT
COUNT(price),purchased_at
FROM purchases
GROUP BY purchased_at; //日付ごとのpriceの回数を取得
-
WHEREとGROUP BYの併用
記述の順番
SELECT 集計関数
FROM テーブル名
WHERE 条件
実行される順番
検索:WHERE
グループ化:GROUP BY
関数:COUNT・SUM・AVG・MAX・MIN
SELECT SUM(price),purchased_at,name
FROM purchases
WHERE category="お菓子"
GROUP BY purchased_at,name;
//categoryがお菓子のレコードを集計。日付と名前でグループ化。金額合計、日付、名前のデータを取得。
-
HAVING
GROUP BY カラム名
HAVING 条件 :グループ化したデータから、さらに条件に合うグループを取得する
実行される順番
検索:WHERE //テーブル全体が検索対象
グループ化:GROUP BY
関数:COUNT・SUM・AVG・MAX・MIN
HAVING:HAVING //グループ化されたデータが検索対象
※実行される順番の規則上、グループ化したあとの条件を絞り込むにはWHEREではなくHAVINGを使う
SELECT SUM(price),purchased_at,name
FROM purchases
GROUP BY purchased_at,name
HAVING SUM(price)>1000;
//合計金額・日付・名前のデータを取得。日付と名前でグループ化。priceカラムのデータの合計が1000を超えるグループを検索。