SQL集約関数 — COUNT、SUM、AVG、MIN、MAX
SQL集約関数の完全解説:COUNT、SUM、AVG、MIN、MAX。COUNT DISTINCT、NULLの扱い、GROUP BYとの組み合わせ、実践的な例を含みます。
Functions
詳細な説明
SQLの集約関数
集約関数は行の集合から単一の値を計算します。レポートクエリの構成要素であり、ほぼ常にGROUP BYと一緒に使用されます。
5つのコア集約
| 関数 | 返す値 |
|---|---|
COUNT(*) |
行数 |
COUNT(col) |
カラム内のNULLでない値の数 |
COUNT(DISTINCT col) |
ユニークなNULLでない値の数 |
SUM(col) |
すべての値の合計 |
AVG(col) |
算術平均 |
MIN(col) |
最小値 |
MAX(col) |
最大値 |
すべてを一度に取得する例
SELECT
COUNT(*) AS total_rows,
COUNT(manager_id) AS has_manager,
COUNT(DISTINCT department_id) AS num_departments,
SUM(salary) AS total_payroll,
AVG(salary) AS avg_salary,
MIN(salary) AS lowest_salary,
MAX(salary) AS highest_salary
FROM employees;
GROUP BYとの組み合わせ
SELECT
department_id,
COUNT(*) AS headcount,
ROUND(AVG(salary), 2) AS avg_salary
FROM employees
GROUP BY department_id
ORDER BY avg_salary DESC;
NULLの扱い
COUNT(*)はNULLを含むすべての行をカウントします。COUNT(col)、SUM、AVG、MIN、MAXはすべてNULL値を無視します。- すべての値がNULLの場合、
SUMとAVGはNULLを返します(ゼロではありません)。
CASEを使った条件付き集約
SELECT
COUNT(CASE WHEN salary >= 80000 THEN 1 END) AS senior_count,
COUNT(CASE WHEN salary < 80000 THEN 1 END) AS junior_count
FROM employees;
このテクニックは条件付き集約と呼ばれ、単一のクエリでピボットスタイルのレポートを作成するのに非常に強力です。
ユースケース
期間別、地域別、商品カテゴリ別にグループ化された合計売上、平均注文額、顧客数などの集計統計を表示するレポートダッシュボードを構築している場合。