SQL COUNT() 関数 vs CASE 式 vs GROUP BY 句:条件付きカウントの比較
SQL で COUNT() 関数に条件を指定する方法
条件を指定する方法
COUNT()
関数に条件を指定するには、WHERE
句を使用します。WHERE
句では、条件式を指定することで、カウント対象となるセル(レコード)を絞り込むことができます。
例
以下の例では、Customers
テーブルの Country
列が Japan
であるレコード数のみをカウントします。
SELECT COUNT(*)
FROM Customers
WHERE Country = 'Japan';
複数の条件を指定する場合は、AND
演算子と OR
演算子を使用できます。
SELECT COUNT(*)
FROM Customers
WHERE Country = 'Japan' AND Age >= 20;
その他の条件指定方法
WHERE
句以外にも、IN
演算子や BETWEEN
演算子などを使用して条件を指定できます。
IN
演算子は、指定された値のいずれかに一致するレコードをカウントするために使用できます。
SELECT COUNT(*)
FROM Customers
WHERE Country IN ('Japan', 'USA');
SELECT COUNT(*)
FROM Customers
WHERE Age BETWEEN 20 AND 30;
テーブルとデータ
CREATE TABLE Customers (
CustomerID int,
FirstName varchar(50),
LastName varchar(50),
Country varchar(50),
Age int
);
INSERT INTO Customers (CustomerID, FirstName, LastName, Country, Age)
VALUES (1, 'John', 'Doe', 'Japan', 25),
(2, 'Jane', 'Doe', 'USA', 30),
(3, 'Mike', 'Smith', 'Japan', 20),
(4, 'Mary', 'Johnson', 'USA', 25),
(5, 'Tom', 'Brown', 'Japan', 35);
サンプルクエリ
以下のサンプルクエリは、COUNT()
関数を使用して、Customers
テーブルのレコード数をカウントします。
-- 全てのレコード数をカウント
SELECT COUNT(*)
FROM Customers;
-- 特定の条件に合致するレコード数をカウント
SELECT COUNT(*)
FROM Customers
WHERE Country = 'Japan';
-- 複数の条件に合致するレコード数をカウント
SELECT COUNT(*)
FROM Customers
WHERE Country = 'Japan' AND Age >= 20;
-- IN 演算子を使用する
SELECT COUNT(*)
FROM Customers
WHERE Country IN ('Japan', 'USA');
-- BETWEEN 演算子を使用する
SELECT COUNT(*)
FROM Customers
WHERE Age BETWEEN 20 AND 30;
実行結果
-- 全てのレコード数をカウント
5
-- 特定の条件に合致するレコード数をカウント
3
-- 複数の条件に合致するレコード数をカウント
2
-- IN 演算子を使用する
4
-- BETWEEN 演算子を使用する
3
補足
- 上記のサンプルコードは、SQL Server で動作確認しています。他のデータベースを使用する場合は、構文が異なる場合があります。
COUNT()
関数は、NULL 値をカウントしません。- DISTINCT キーワードを使用すると、重複するレコードをカウントせずに、レコード数をカウントできます。
COUNT() 関数以外で条件付きカウントを行う方法
CASE
式を使用して、条件ごとにカウント値を累積することができます。
SELECT
CASE Country
WHEN 'Japan' THEN COUNT(*)
WHEN 'USA' THEN COUNT(*)
END AS CountryCount
FROM Customers;
CountryCount
3
2
GROUP BY
句を使用して、グループごとにレコード数をカウントすることができます。
SELECT Country, COUNT(*) AS RecordCount
FROM Customers
GROUP BY Country;
Country RecordCount
Japan 3
USA 2
サブクエリを使用して、条件付きカウント結果を別のクエリで使用することができます。
SELECT
(SELECT COUNT(*) FROM Customers WHERE Country = 'Japan') / COUNT(*) AS JapanPercentage
FROM Customers;
JapanPercentage
0.6
sql sql-server t-sql