概要:このチュートリアルでは、SQL COUNT関数を使用してグループ内のアイテム数を取得する方法を学習します。
SQL COUNT関数の紹介
SQLのCOUNT
関数は、クエリによって返される行数を返す集計関数です。COUNT
関数はSELECT文で使用して、従業員数、各部署の従業員数、特定の職務に就いている従業員数などを取得できます。
SQL COUNT
関数の構文を以下に示します。
COUNT([ALL | DISTINCT] expression);
Code language: SQL (Structured Query Language) (sql)
COUNT
関数の結果は、渡す引数によって異なります。
ALL
キーワードは、結果に重複値を含めます。たとえば、(1, 2, 3, 3, 4, 4)というグループがあり、COUNT
関数を適用すると、結果は6になります。デフォルトでは、COUNT
関数は、指定するかどうかに関わらずALL
キーワードを使用します。DISTINCT
キーワードは、一意の値のみをカウントします。たとえば、(1, 2, 3, 3, 4, 4)というグループにCOUNT
関数を適用すると、結果は4になります。- 式は、値をカウントするテーブルの列です。
引数としてアスタリスク(*)を受け入れるCOUNT
関数の別の形式を以下に示します。
COUNT(*)
Code language: SQL (Structured Query Language) (sql)
COUNT(*)
関数は、クエリ内のテーブルの行数を返します。重複行とNULL値を含む行をカウントします。
SQL COUNT関数の例
COUNT
関数の動作を確認するために、いくつかの例を見てみましょう。デモでは、サンプルデータベースのemployees
テーブルを使用します。

SQL COUNT(*)の例
次の例では、COUNT(*)
関数を使用してemployees
テーブルの行数を取得します。
SELECT
COUNT(*)
FROM
employees;
Code language: SQL (Structured Query Language) (sql)
次の例では、COUNT(*)
関数を使用して、idが6の部署で働く従業員数をカウントします。
SELECT
COUNT(*)
FROM
employees
WHERE
department_id = 6;
Code language: SQL (Structured Query Language) (sql)
この例では
- まず、
WHERE
句で、idが6の部署をフィルタリングします。 - 次に、
COUNT(*)
関数は、部署idが6であるemployees
テーブルの行数を返します。
次の例では、COUNT(*)
関数を使用して、job idが9の従業員数を取得します。
SELECT
COUNT(*)
FROM
employees
WHERE
job_id = 9;
Code language: SQL (Structured Query Language) (sql)
動作方法。
- まず、
WHERE
句は、job idが9であるemployees
テーブルの行を含めます。 - 次に、
COUNT(*)
は、job idが9であるemployees
テーブルの行数を返します。
次の例では、ASキーワードを使用してCOUNT(*)
に列エイリアスを割り当てます。
SELECT
COUNT(*) as employee_count
FROM
employees
WHERE
job_id = 9;
Code language: JavaScript (javascript)
SQL COUNTとGROUP BY句の例
次の例では、COUNT
関数をGROUP BY句と共に使用して、各部署の従業員数を求めます。
SELECT
department_id,
COUNT(*)
FROM
employees
GROUP BY
department_id;
Code language: SQL (Structured Query Language) (sql)

動作方法
- まず、
GROUP BY
句は、employees
テーブルの行を部署idでグループ化します。 - 次に、
COUNT(*)
関数は、各グループの行数を返します。
次の例では、COUNT(*)
関数を使用して、部署別の従業員数を取得します。また、INNER JOIN
句を使用して、結果セットに部署名を含めます。
SELECT
e.department_id,
department_name,
COUNT(*)
FROM
employees e
INNER JOIN departments d
ON d.department_id = e.department_id
GROUP BY
e.department_id,
department_name;
Code language: SQL (Structured Query Language) (sql)

SQL COUNT(*)とORDER BY句の例
次の例では、ORDER BY句を使用して、部署別の従業員数をソートします。
SELECT
e.department_id,
department_name,
COUNT(*)
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
e.department_id
ORDER BY
COUNT(*) DESC;
Code language: SQL (Structured Query Language) (sql)

SQL COUNTとHAVING句の例
次の例では、部署別の従業員数を返します。また、HAVING
句を使用して、従業員が5人以上いる部署のみを選択します。
SELECT
e.department_id,
department_name,
COUNT(*)
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
e.department_id
HAVING
COUNT(*) > 5
ORDER BY
COUNT(*) DESC;
Code language: SQL (Structured Query Language) (sql)

SQL COUNT(DISTINCT 式)の例
次の例では、COUNT
を使用して、employees
テーブルのjob_id
列の値の数を取得します。
SELECT
COUNT(job_id)
FROM
employees;
Code language: SQL (Structured Query Language) (sql)

クエリは40を返し、重複値を含みます。重複値を削除するには、COUNT
関数にDISTINCT
キーワードを使用します。
SELECT
COUNT(DISTINCT job_id)
FROM
employees;

次の例では、COUNT
関数をDISTINCT
キーワードと共に使用して、マネージャーの人数を取得します。
SELECT
COUNT(DISTINCT manager_id)
FROM
employees;
Code language: SQL (Structured Query Language) (sql)

概要
COUNT
関数は、グループ内の行数を返します。ALL
キーワードは重複値を含め、DISTINCT
キーワードは結果から重複値を除去します。COUNT(*)
は、クエリ内の行数を返し、重複行とNULL値を含む行を含みます。