GROUP BYについての詳細な解説と使用例。データをグループ化して集計する方法を学べます。
説明
GROUP BY は指定した列の値が同じ行をひとまとめにし、COUNT・SUM・AVG・MAX・MIN などの集計関数と組み合わせてグループごとの集計値を求めるための構文です。
集計結果をさらに絞り込むには HAVING句 を使います。
基本構文
quest.sql
Loading...
例文
カテゴリごとの商品数を集計
quest.sql
Loading...
— RESULT
クエリを実行してください
ユーザーごとの注文数量合計を集計
quest.sql
Loading...
— RESULT
クエリを実行してください
カテゴリごとの平均価格・最高価格を集計
quest.sql
Loading...
— RESULT
クエリを実行してください
3件以上注文したユーザーを集計(HAVING句)
quest.sql
Loading...
— RESULT
クエリを実行してください
注意点
SELECT に書ける列は GROUP BY 列か集計関数だけ
GROUP BY していない列をそのまま SELECT に書くとエラーになる(MySQLの一部モードを除く)。
集計結果の絞り込みは HAVING を使う
WHERE は集計前の絞り込み、HAVING は集計後の絞り込み。混同しないよう注意。
NULL はひとつのグループとして扱われる
GROUP BY 列に NULL が含まれる場合、NULL どうしが同じグループにまとめられる。
ORDER BY と組み合わせて集計結果を並べ替えできる
GROUP BY の後に ORDER BY AGG_FUNC(...) DESC のように書くことで、集計値順に並び替えられる。
使用シーン
- カテゴリ・部門ごとの件数・合計を集計するとき
- ユーザーごとの購買総額を算出するとき
- 日別・月別の売上を集計するとき
- 集計結果に条件をかけてランキングを作るとき
このクエリを実践するには?
#30 商品別注文件数
中級GROUP BYログインして解除
各商品の注文件数を集計してください。商品名も含めて表示してください。
#33 カテゴリ別平均価格
中級GROUP BYログインして解除
productsテーブルでカテゴリごとの平均価格を計算してください。
#35 日別注文件数
中級GROUP BYログインして解除
ordersテーブルで注文日ごとの注文件数を集計してください。
#39 カテゴリ別注文件数
中級JOIN + 集計ログインして解除
商品カテゴリごとに関連する注文件数を集計してください。
関連クエリ