Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
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 列名) | 指定した列の重複を除いた一意な値の件数を数えます。 |
サンプルコード
-- 社員の総数を取得します。 SELECT COUNT(*) AS 社員数 FROM employees; -- ボーナスが設定されている社員数を取得します(NULLを除外)。 SELECT COUNT(bonus) AS ボーナス対象者数 FROM employees; -- 部署の種類数(重複なし)を取得します。 SELECT COUNT(DISTINCT department) AS 部署数 FROM employees; -- 営業部の社員数を取得します。 SELECT COUNT(*) AS 営業部員数 FROM employees WHERE department = '営業部'; -- 部署ごとの社員数を取得します(GROUP BYと組み合わせ)。 SELECT department, COUNT(*) AS 人数 FROM employees GROUP BY department ORDER BY 人数 DESC;
実行結果
-- SELECT department, COUNT(*) AS 人数 FROM employees GROUP BY department ORDER BY 人数 DESC; の結果例 -- +----------+------+ -- | department | 人数 | -- +----------+------+ -- | 開発部 | 8 | -- | 営業部 | 6 | -- | 総務部 | 3 | -- +----------+------+
データベース別の書き方
『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;
Oracle では、大規模テーブルの『COUNT(*)』を高速化するために並列ヒント(『/*+ PARALLEL */』)を使用できます。
-- Oracle(並列実行で高速化) SELECT /*+ PARALLEL(employees, 4) */ COUNT(*) FROM employees;
概要
『COUNT』は集計関数(集約関数)の一つです。『COUNT(*)』と『COUNT(列名)』の違いは、NULLを含むかどうかです。列に欠損値(NULL)がある場合、同じテーブルでも結果が異なることがあるため注意してください。
行の存在チェックに『COUNT(*) > 0』を使う場合、MySQLでは『EXISTS』サブクエリの方が早期終了できるため高速です。大規模テーブルでの存在確認は『EXISTS』の使用を検討してください。
グループごとの集計には『GROUP BY / HAVING』を、合計・平均には『SUM / AVG』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。