【SQLチュートリアル】PostgreSQLでCOUNT DISTINCT関数を使って列の個別値の個数を確認する方法
PostgreSQLでデータベース列の値の出現回数を数える方法
PostgreSQLデータベースで、特定の列に存在するすべての異なる値の出現回数を数えることは、データ分析やレポート作成において重要なタスクです。このチュートリアルでは、この操作を達成するための2つの主要な方法について、わかりやすく説明します。
方法1:COUNT DISTINCT関数を使用する
最も基本的な方法は、COUNT DISTINCT
関数を使用する方法です。この関数は、指定された列内のすべての異なる値をカウントし、その結果を返します。
SELECT column_name, COUNT DISTINCT(column_name) AS count
FROM table_name;
上記のクエリは、table_name
テーブルの column_name
列内のすべての異なる値をカウントし、その結果を count
という名前の別名で表示します。
方法2:GROUP BY句を使用する
もう1つの方法は、GROUP BY
句を使用する方法です。この句は、指定された列に基づいて結果をグループ化し、各グループのレコード数をカウントします。
SELECT column_name, COUNT(*) AS count
FROM table_name
GROUP BY column_name;
例
次の例は、customers
テーブルの country
列の値の出現回数を数える方法を示します。
SELECT country, COUNT(*) AS count
FROM customers
GROUP BY country;
このクエリは、各国の顧客数を表示する結果セットを返します。
- 結果セットをソートするには、
ORDER BY
句を使用できます。 - 必要に応じて、
WHERE
句を使用してクエリ結果をフィルタリングできます。 - 上記の例では、
COUNT(*)
関数を使用していますが、COUNT DISTINCT(column_name)
関数を使用しても同様の結果が得られます。
-- customersテーブルの構造
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
country VARCHAR(255) NOT NULL
);
-- サンプルデータ挿入
INSERT INTO customers (name, email, country)
VALUES
('John Doe', '[email protected]', 'US'),
('Jane Doe', '[email protected]', 'US'),
('Peter Jones', '[email protected]', 'UK'),
('Mary Smith', '[email protected]', 'UK'),
('David Williams', '[email protected]', 'US');
-- 国ごとの顧客数をカウントする
SELECT country, COUNT(*) AS count
FROM customers
GROUP BY country;
このクエリは、以下の結果セットを返します。
country | count
------- | --------
US | 2
UK | 2
この結果は、US
国籍の顧客が2人、UK
国籍の顧客が2人いることを示しています。
説明
- 最後に、
SELECT
クエリを使用して、country
列の値の出現回数をカウントします。GROUP BY
句を使用して結果を国別にグループ化し、COUNT(*)
関数を使用して各グループのレコード数をカウントします。 - 次に、サンプルデータをテーブルに挿入します。このデータには、2人の米国籍顧客、2人の英国籍顧客が含まれています。
- 上記のコードは、まず
customers
テーブルの構造を定義します。このテーブルには、id
、name
、email
、country
の4つの列があります。
- 実際のデータベースクエリを作成する場合は、使用する実際のテーブルと列名に置き換える必要があります。
- 上記の例では、
customers
テーブルとサンプルデータは架空のものであり、実在するものではありません。
SELECT COUNT(*) AS count
FROM (
SELECT column_name
FROM table_name
GROUP BY column_name
) AS subquery;
WINDOW関数を使用する
PostgreSQL 8.0以降では、WINDOW関数を使用して、個々の行に基づいて値の出現回数をカウントすることができます。
SELECT column_name, COUNT(*) OVER (PARTITION BY column_name) AS count
FROM table_name;
COMMON TABLE EXPRESSION (CTE)を使用する
WITH cte AS (
SELECT column_name, COUNT(*) OVER (PARTITION BY column_name) AS count
FROM table_name
)
SELECT COUNT(*) AS count
FROM cte;
ARRAY_AGG関数を使用する
ARRAY_AGG関数を使用して、個々の値のリストを取得し、その後、そのリストの長さをカウントすることができます。
SELECT COUNT(ARRAY_AGG(DISTINCT column_name)) AS count
FROM table_name;
sql database postgresql