🗄️SQL

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を除きたいときは列指定が便利です。