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)SUMAVGMINMAXはすべてNULL値を無視します。
  • すべての値がNULLの場合、SUMAVGは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;

このテクニックは条件付き集約と呼ばれ、単一のクエリでピボットスタイルのレポートを作成するのに非常に強力です。

ユースケース

期間別、地域別、商品カテゴリ別にグループ化された合計売上、平均注文額、顧客数などの集計統計を表示するレポートダッシュボードを構築している場合。

試してみる — SQL Cheat Sheet

フルツールを開く