SQLでグループごとの件数を数える方法(GROUP BY)
SQLで「カテゴリごとに何件あるか」を数えたいときはGROUP BYとCOUNTを組み合わせます。データの集計でよく使う基本テクニックです。コピペで使える形と、件数での絞り込み・並べ替えも紹介します。
-- カテゴリごとの件数
SELECT category, COUNT(*) AS cnt
FROM products
GROUP BY category;| 部分 | 役割 |
|---|---|
| GROUP BY category | カテゴリごとにまとめる |
| COUNT(*) | 各グループの件数を数える |
| AS cnt | 結果の列に名前をつける |
基本の書き方
「まとめる列」と「集計」をセットで指定します。
- GROUP BYでまとめる
- GROUP BY のあとに指定した列の値ごとに、行がグループ化されます。同じカテゴリが1グループになります。
- COUNTで数える
- COUNT(*) で各グループの行数(件数)を数えます。SUMやAVGに変えれば合計・平均も出せます。
コツ:SELECTに書く列はGROUP BYに指定した列か、集計関数(COUNTなど)に限るのが基本。それ以外の列を書くとエラーや想定外の結果になることがあります。
絞り込みと並べ替え
集計結果をさらに加工できます。
SELECT category, COUNT(*) AS cnt
FROM products
GROUP BY category
HAVING COUNT(*) >= 5
ORDER BY cnt DESC;- HAVING…集計後の件数で絞る(WHEREは集計前なので使い分ける)。
- ORDER BY…件数の多い順などに並べ替える。
- AS…集計列に名前をつけて並べ替えに使う。
注意:集計結果を条件で絞るときはWHEREでなくHAVINGを使います。WHEREは集計前の行に対する条件、HAVINGは集計後のグループに対する条件、という違いを押さえましょう。
あわせて読みたい:SQLで重複行を除いて取得する方法(DISTINCT)/CSSで要素を上下左右中央寄せする方法(Flexbox)/SQLの記事一覧
まとめ
グループごとの件数はGROUP BY でまとめ、COUNT(*) で数えるのが基本。SELECTにはGROUP BYの列か集計関数だけを書きます。件数で絞るならHAVING(WHEREでなく)、並べ替えはORDER BYを使います。集計の基本としてぜひ押さえましょう。
よくある質問
SQLでグループごとの件数を数えるには?
GROUP BYとCOUNTを使います。SELECT category, COUNT(*) FROM products GROUP BY category; で、カテゴリごとの件数を集計できます。
SELECTに書ける列の制限は?
GROUP BYに指定した列か、COUNTなどの集計関数だけが基本です。それ以外の列を書くとエラーや想定外の結果になることがあります。
集計後の件数で絞り込むには?
HAVINGを使います。HAVING COUNT(*) >= 5 のように書きます。WHEREは集計前の行への条件、HAVINGは集計後のグループへの条件という違いがあります。
件数の多い順に並べるには?
ORDER BYを使います。COUNT(*) に AS cnt と名前をつけ、ORDER BY cnt DESC とすると件数の多い順に並べ替えられます。