基本集計する

数値の合計を求めたい

このページでできること

SUM は NULL を除いた数値の合計を返します。

SQL例の例

SELECT SUM(salary) AS total_salary
FROM employees;

この例で使うサンプル表を見る共通の架空データと、練習用の表を確認します

全20項目で共通の架空データです。salary は月給(円)。NULL は未設定を表します。結果の小数点以下の表示桁数は実行環境により異なります。

employees

employees のサンプルデータ
idnamedepartment_idsalary
1佐藤1300000
2鈴木2400000
3佐々木1350000
4高橋2400000
5田中NULL250000
6伊藤3NULL

departments

departments のサンプルデータ
idname
1営業
2開発
3人事
4広報

employees.department_id が departments.id に対応します。表は説明用です。このサイト上でSQLは実行しません。

使い方を順番に確認する練習を始めるときは、この手順に沿って進めます

使い方

  1. 合計したい salary を選ぶ
  2. SUM(salary) と書く
  3. 合計が1700000円になることを確認する

結果の例

結果:1行
total_salary
1700000
注意点

対象値がすべて NULL、または対象行がない場合、SUM は0ではなく NULL を返します。

合計がNULLになる2つの場合

社員はいるが、給与がすべて未設定の場合

SELECT COUNT(*) AS employee_count,
       SUM(salary) AS total_salary
FROM employees
WHERE department_id = 3;

人事部には伊藤さんが1人いますが、給与は未設定です。足し合わせる数値がないため、合計は0ではなく NULL です。「給与総額が0円」と「金額が分からない」は意味が違います。

社員はいるが、給与がすべて未設定の場合:1行
employee_counttotal_salary
1NULL

条件に合う社員がいない場合

SELECT COUNT(*) AS employee_count,
       SUM(salary) AS total_salary
FROM employees
WHERE department_id = 4;

広報部の社員はこのサンプルにいません。COUNT(*) は0、SUM(salary) は NULL になります。合計だけでは「社員がいない」と「給与が全員未設定」を区別できないため、人数も一緒に確認します。

条件に合う社員がいない場合:1行
employee_counttotal_salary
0NULL
うまくいかないときに確認するエラーや想定と違う結果が出たときの確認ポイント

うまくいかないとき

表や列が存在しないエラーは、サンプルの表名・列名と自分の環境が一致しているか確認します。構文エラーはデータベース製品の違いにも注意してください。

PostgreSQLの構文を基準にしています。MySQL・SQL Server・SQLiteなどでは、一部の構文や挙動が異なります。

公式ドキュメントで詳しく確認する

同じカテゴリの項目

一覧に戻る