GROUP BY の使い方

グループごとに集計する

書き方

SELECT 列, 集計 FROM 表 GROUP BY 列;

同じ値の行をまとめて集計します。SELECT には GROUP BY の列か集計関数だけを書けます。

よく使うオプション

オプション意味
GROUP BY 列同じ値の行を 1 つのグループにまとめる
GROUP BY 列, 列組み合わせごとにまとめる
GROUP BY 式計算した値(年など)でまとめる

例

SELECT dept_id, COUNT(*) FROM employees GROUP BY dept_id; dept_id | count
---------+-------
       1 |    10
       2 |    12
       3 |     3
(3 rows)

部署ごとに、社員が何人いるかを数えます。

SELECT dept_id, AVG(salary) FROM employees GROUP BY dept_id ORDER BY AVG(salary) DESC;

部署ごとの平均給与を、高い順に並べます。

SELECT customer_id, status, COUNT(*) FROM orders GROUP BY customer_id, status;

客と状態の組み合わせごとに、注文の数を数えます。

SELECT d.name, COUNT(*) FROM employees e JOIN departments d ON d.id = e.dept_id GROUP BY d.name;

部署の名前ごとに数えます。JOIN した後でもまとめられます。

よくある間違い・注意

  • SELECT に書けるのは、GROUP BY に書いた列と集計関数だけです。ほかの列を書くとエラーになります(MySQL は設定によっては通りますが、値は決まりません)。
  • GROUP BY だけでは並び順は決まりません。順番が要るときは ORDER BY を書きます。
  • NULL の行は、NULL のグループとして 1 つにまとまります。

実際に打って練習する

SQL コースの Lv21「まとめる GROUP BY」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

Lv1〜3 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。

SQL 構文一覧(使い方と例)へ戻る