【SQL】データのグループ化(GROUP BY・HAVING)

  • GROUP BY
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を超えるグループを検索。