SQL COUNT() 関数
1. SQL COUNT() 関数
COUNT() 関数は、指定された条件に一致する行(レコード)の数をリターンします。
2. COUNT() のシンタックス
SELECT COUNT([DISTINCT] カラム名 | *)
FROM テーブル名
WHERE 条件;COUNT() の挙動は、括弧内で使用される引数によって異なります:
- COUNT(*):テーブル内の全行数をカウントします(NULL 値を含みます)。
- COUNT(カラム名):指定されたカラム内の NULL ではないすべての値をカウントします。
- COUNT(DISTINCT カラム名):指定されたカラム内の、ユニーク(一意)かつ NULL ではない値の数のみをカウントします。
3. COUNT(*) の使用
次の SQL は COUNT(*) を使用し、"Products" テーブルの全行数をカウントします(NULL 値も含まれます)。
3.1 例(自分専用の SQL Server を取得)
-- 全レコード数をカウントする --
SELECT COUNT(*)
FROM Products;4. デモ用データベース
以下は、例題で使用する Products テーブルの抜粋です。
| ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
|---|---|---|---|---|---|
| 1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18.00 |
| 2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19.00 |
| 3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10.00 |
| 4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22.00 |
| 5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
5. COUNT(column_name) の使用
COUNT(column_name) は、指定されたカラム内の NULL ではないすべての値をカウントします。
次の SQL は、"ProductName" カラムの NULL ではないすべての値をカウントします。
5.1 例
-- ProductName が入っている行数をカウントする --
SELECT COUNT(ProductName)
FROM Products;6. COUNT(DISTINCT column_name) の使用
DISTINCT キーワードを使用することで、重複を無視することができます。
COUNT(DISTINCT column_name) は、カラム内のユニークかつ NULL ではない値のみをカウントします。
DISTINCT が指定されている場合、同じ値を持つ行は 1 つとしてカウントされます。
次の SQL は、"Price" カラムのユニークで NULL ではない値の数をカウントします。
6.1 例
"Products" テーブルには何種類の異なる価格がありますか:
-- 重複を除いた価格の種類をカウントする --
SELECT COUNT(DISTINCT Price)
FROM Products;7. WHERE 句の追加
WHERE 句を追加して、条件を指定することができます。
7.1 例
Price(価格)が 20 より高い製品の数をカウントする:
-- 価格が20ドルを超える製品のレコード数をカウントする --
SELECT COUNT(ProductID)
FROM Products
WHERE Price > 20;8. エイリアス(Alias)の使用
COUNT() を使用する場合、リターンされるカラムには名前がつきません。AS キーワードを使用して、カラムに説明的な名前を付けます。
8.1 例
カウント結果のカラム名を "Number of records" に設定する:
-- カラム名を 'Number of records' として全件数を取得 --
SELECT COUNT(*) AS [Number of records]
FROM Products;9. GROUP BY と COUNT() の併用
ここでは COUNT() 関数と GROUP BY 句を併用して、"Products" テーブルのカテゴリ(CategoryID)ごとのレコード数をリターンします。
9.1 例
-- カテゴリIDごとにグループ化し、それぞれのレコード件数を取得 --
SELECT COUNT(*) AS [Number of records], CategoryID
FROM Products
GROUP BY CategoryID;