COUNT・SUM・AVG で集計する
MySQL には、データを集計するための関数がいくつか用意されています。行数を数えたり、合計や平均を計算したりするときに使います。
COUNT:行数を数える
-- テーブルの行数
SELECT COUNT(*) FROM users;
-- 特定のカラムで NULL でない行数
SELECT COUNT(email) FROM users;
-- ユニークな値の数
SELECT COUNT(DISTINCT city) FROM users;COUNT(*) はすべての行を数えます。COUNT(カラム名) はそのカラムが NULL でない行だけを数えます。
| 書き方 | 意味 |
|---|---|
| COUNT(*) | 全行数 |
| COUNT(カラム名) | NULL 以外の行数 |
| COUNT(DISTINCT カラム名) | ユニークな値の数 |
SUM:合計を計算する
-- 全注文の合計金額
SELECT SUM(price) FROM orders;SUM は数値カラムに対して使います。NULL は無視されます。
AVG:平均を計算する
-- 平均年齢
SELECT AVG(age) FROM users;AVG も NULL を無視して計算します。たとえば 3 人中 1 人の age が NULL なら、2 人の平均が返ります。
MIN・MAX:最小値・最大値
-- 最年少
SELECT MIN(age) FROM users;
-- 最年長
SELECT MAX(age) FROM users;文字列に対しても使えます。その場合は辞書順で最小・最大が返ります。
-- 最初のアルファベット順の名前
SELECT MIN(name) FROM users;複数の集計を同時に
1 つのクエリで複数の集計関数を使えます。
SELECT
COUNT(*) AS total_users,
AVG(age) AS avg_age,
MIN(age) AS min_age,
MAX(age) AS max_age
FROM users;WHERE と組み合わせる
集計対象を WHERE で絞り込めます。
-- 東京在住ユーザーの平均年齢
SELECT AVG(age) FROM users WHERE city = '東京';NULL に注意
集計関数は基本的に NULL を無視します。これは便利なこともありますが、意図しない結果になることもあります。
COUNT(*)
NULL の行も含めて数える
COUNT(カラム名)
NULL の行は数えない
たとえば 100 人中 10 人の email が NULL のとき、COUNT(*) は 100、COUNT(email) は 90 を返します。
これらの集計関数は、GROUP BY と組み合わせるとさらに強力になります。グループごとの集計については次の記事で説明します。












