GROUP BY

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ログインして解除

この問題にチャレンジするにはログインが必要です。ログインして全ての練習問題にアクセスしましょう。

#35 日別注文件数

中級GROUP BYログインして解除

この問題にチャレンジするにはログインが必要です。ログインして全ての練習問題にアクセスしましょう。

#39 カテゴリ別注文件数

中級JOIN + 集計ログインして解除

この問題にチャレンジするにはログインが必要です。ログインして全ての練習問題にアクセスしましょう。

関連クエリ
QSQL Quest