COUNT
テーブルの行数や条件に一致する件数を数える集計関数です。GROUP BYと組み合わせてグループごとの件数集計にも使用します。
構文
テーブルの全行数を取得します(NULLを含む)。
SELECT COUNT(*) FROM テーブル名;
指定した列がNULLでない行数を取得します。
SELECT COUNT(列名) FROM テーブル名;
指定した列の重複を除いた件数を取得します。
SELECT COUNT(DISTINCT 列名) FROM テーブル名;
条件に一致する行数を取得します。
SELECT COUNT(*) FROM テーブル名 WHERE 条件;
構文一覧
| 構文 | 概要 |
|---|---|
| COUNT(*) | NULLを含むすべての行を数えます。最も一般的な使用方法です。 |
| COUNT(列名) | 指定した列がNULLでない行のみを数えます。NULLの行はカウントされません。 |
| COUNT(DISTINCT 列名) | 指定した列の重複を除いた一意な値の件数を数えます。 |
サンプルコード
以下の『employees』テーブルを例に説明します。
社員の総数を取得します。
sample_count.sql
SELECT COUNT(*) AS 社員数 FROM employees;
+--------+ | 社員数 | +--------+ | 5 | +--------+ 1 row in set
ボーナスが設定されている社員数を取得します(NULLを除外)。
sample_count.sql
SELECT COUNT(bonus) AS ボーナス対象者数 FROM employees;
+------------------+ | ボーナス対象者数 | +------------------+ | 3 | +------------------+ 1 row in set
部署の種類数(重複なし)を取得します。
sample_count.sql
SELECT COUNT(DISTINCT department) AS 部署数 FROM employees;
+--------+ | 部署数 | +--------+ | 5 | +--------+ 1 row in set
堂島組の社員数を取得します。
sample_count.sql
SELECT COUNT(*) AS 堂島組員数 FROM employees WHERE department = '堂島組';
+------------+ | 堂島組員数 | +------------+ | 1 | +------------+ 1 row in set
部署ごとの社員数を取得します(GROUP BYと組み合わせ)。
sample_count.sql
SELECT department, COUNT(*) AS 人数 FROM employees GROUP BY department ORDER BY 人数 DESC;
+--------------------+------+ | department | 人数 | +--------------------+------+ | 堂島組 | 1 | | 真島組 | 1 | | スカイファイナンス | 1 | | 錦山組 | 1 | | 冴島組 | 1 | +--------------------+------+ 5 rows in set
データベース別の書き方
『COUNT(*)』『COUNT(列名)』『COUNT(DISTINCT 列名)』の構文は主要なデータベースで共通して使用できます。
SELECT COUNT(*) AS 社員数 FROM employees; SELECT COUNT(DISTINCT department) AS 部署数 FROM employees; SELECT department, COUNT(*) AS 人数 FROM employees GROUP BY department;
概要
『COUNT』は集計関数(集約関数)の一つです。『COUNT(*)』と『COUNT(列名)』の違いは、NULLを含むかどうかです。列に欠損値(NULL)がある場合、同じテーブルでも結果が異なることがあるため注意してください。
行の存在チェックに『COUNT(*) > 0』を使う場合、MySQLでは『EXISTS』サブクエリの方が早期終了できるため高速です。大規模テーブルでの存在確認は『EXISTS』の使用を検討してください。
グループごとの集計には『GROUP BY / HAVING』を、合計・平均には『SUM / AVG』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。