⏱ 6分 ★★★★★ 頻出:高

集計関数

COUNT・SUM・AVG・MAX・MINとNULLの扱い。COUNT(*)との違いを完全理解

集計関数=「複数の行を1つの値にまとめる関数」

集計関数はGROUP BYと組み合わせて使うことが多いですが、GROUP BYなしでも「全体」を集計する場面で使えます。

主要集計関数の一覧

関数意味NULLの扱い
COUNT(*)行数(NULLを含む全行)NULLも数える
COUNT(列名)その列がNULLでない行数NULLを除外して数える
SUM(列名)合計値NULLを無視
AVG(列名)平均値NULLを除いた値の平均
MAX(列名)最大値NULLを無視
MIN(列名)最小値NULLを無視

NULLの扱いに要注意

salaryテーブル: 100, 200, NULL, 300, NULL
関数結果理由
COUNT(*)5全行数(NULL含む)
COUNT(salary)3NULL以外の行数
SUM(salary)600100+200+300(NULLを無視)
AVG(salary)200600÷3(NULLを除外して計算)
MAX(salary)300最大値(NULL無視)
AVGはNULLを除いた行で平均を計算します。NULLを0として扱うわけではありません。「5件でNULLが2件あればAVGは残り3件の平均」が正解。

DISTINCTと集計関数の組み合わせ

-- 重複を除いた顧客数
SELECT COUNT(DISTINCT customer_id) AS unique_customers
FROM orders;

-- 重複を除いた種類の合計金額(稀な使い方)
SELECT SUM(DISTINCT price) FROM products;
COUNT(*) と COUNT(列名) の違いが頻出。「NULLを含む全件数はCOUNT(*)、NULLを除く件数はCOUNT(列名)」。
🧠 確認クイズ
Q1. salary列に値 100, 200, NULL, 300 がある場合、AVG(salary) の結果はどれか?
Q2. COUNT(*)とCOUNT(column_name)の違いとして正しいのはどれか?
Q3. COUNT(DISTINCT customer_id) の意味として正しいのはどれか?