SQLでグループごとの件数を数える方法(GROUP BY)
グループごとの件数は GROUP BY と COUNT で集計します。
基本:カテゴリ別の件数
SELECT category, COUNT(*) AS cnt
FROM products
GROUP BY category;
多い順に並べる
SELECT category, COUNT(*) AS cnt
FROM products
GROUP BY category
ORDER BY cnt DESC;
件数で絞る(HAVING)
SELECT category, COUNT(*) AS cnt
FROM products
GROUP BY category
HAVING COUNT(*) >= 10;
ポイント
- 集計結果を条件で絞るときは WHERE ではなく HAVING。
- SELECT に書く列は、基本GROUP BY に含めた列か集計関数だけにする。
よくある質問
WHEREとHAVINGの違いは?
WHEREは集計前の行を絞り、HAVINGは集計後のグループを絞ります。COUNTの結果で絞るならHAVINGを使います。
COUNT(*) と COUNT(列) の違いは?
COUNT(*) は行数、COUNT(列) はその列がNULLでない行数を数えます。NULLを除きたいときは列指定が便利です。