SQL COUNT() 関数 vs CASE 式 vs GROUP BY 句:条件付きカウントの比較

2024-04-02

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


システムストアドプロシージャを使用して特定の文字列で始まるテーブルをすべて削除する方法

このチュートリアルでは、SQL Server、MySQL、PostgreSQLなどのデータベースで、特定の文字列で始まるテーブルをすべて削除するクエリについて解説します。使用する技術SQLSQL ServerMySQLPostgreSQL前提条件...


PostgreSQLにおける条件分岐:IF文、CASE式、PL/pgSQLの使い分け

PostgreSQLでは、条件に応じて異なる処理を実行するIF文を使用することができます。これは、プログラミング言語における標準的なIF文と同様に機能し、データ操作や制御フローの分岐を可能にします。PostgreSQLのIF文は、以下の構文で記述されます。...


COALESCE関数を超えた!SQL Server 2008でNULL値を自在に操る7つのテクニック

COALESCE関数は、SQL Server 2008を含む様々なバージョンで利用可能な便利な機能です。この関数は、引数リストに指定された値を順番に評価し、最初にNULLではない値を見つけ次第、その値を返すという役割を果たします。もし引数リスト全ての値がNULLであった場合、COALESCE関数自体もNULLを返します。...


【初心者向け】MySQLでスペースを含む列名を安全に扱うテクニック

バッククォート(`)を使用する最も一般的で安全な方法は、バッククォート(`)で列名を囲むことです。これは、スペースを含む列名だけでなく、その他の特殊文字を含む列名にも有効です。例:識別子引用符を使用するMySQL 8以降では、識別子引用符を使用してスペースを含む列名を選択することもできます。識別子引用符は、バックスラッシュ()と二重引用符(")で構成されます。...


Ballerina.io で MariaDB データベースと SQL LIKE ステートメントを駆使:データ操作の達人になるためのガイド

Ballerina. io は、SQL LIKE ステートメントを使用して、MariaDB データベース内のデータに対するクエリを実行する方法を提供します。LIKE ステートメントは、パターンマッチングを使用して、特定の条件に一致する行を検索するために使用できます。...