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 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。