基本集計する

行数を数えたい

このページでできること

COUNT(*) は全行を数え、COUNT(列) はその列が NULL でない行を数えます。

SQL例の例

SELECT COUNT(*) AS employee_count,
       COUNT(salary) AS salary_count
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. COUNT(*) で全社員を数える
  2. COUNT(salary) で給与設定済みの人数を数える
  3. それぞれ6人と5人になることを確認する

結果の例

結果:1行
employee_countsalary_count
65
注意点

COUNT は該当行がない場合に0を返します。給与未設定の社員も COUNT(*) には含まれます。

NULLの行と、該当行がない場合を比べる

給与未設定の社員だけを数える

SELECT COUNT(*) AS employee_count,
       COUNT(salary) AS salary_count
FROM employees
WHERE salary IS NULL;

WHERE で給与未設定の伊藤さんだけに絞ってから数えます。社員の行は1行ありますが、salary に値が入った行は0行なので、結果は1と0です。COUNT(salary) は「未設定の人数」を数える書き方ではありません。

給与未設定の社員だけを数える:1行
employee_countsalary_count
10

条件に合う社員が一人もいない場合

SELECT COUNT(*) AS employee_count,
       COUNT(salary) AS salary_count
FROM employees
WHERE salary > 1000000;

このサンプルには月給100万円を超える社員がいないため、両方とも0です。GROUP BY のないこの集計は、対象の社員が0人でも集計結果を1行返します。GROUP BY があると、存在しないグループの結果行は作られません。

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

うまくいかないとき

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

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

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

同じカテゴリの項目

一覧に戻る