いろは2986023 views
小学算数1194618 views
世界の国560595 views
小学理科717236 views
小学社会308636 views
LaTeX957300 views
高校化学2913383 views
高校物理158224 views
教育148875 views
高校国語785655 views
Help
Tools

English

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 と組み合わせるとさらに強力になります。グループごとの集計については次の記事で説明します。