COUNT DISTINCT関数とその他の集計関数の比較
SQLで列内の個別の値の数を検索するには、COUNT DISTINCT
関数を使用します。この関数は、指定された列内の重複を除いた個別の値の数を返します。
基本的な構文
SELECT COUNT DISTINCT(column_name)
FROM table_name;
例
customers
テーブルにcountry
列があるとします。この列内の個別の国の数を検索するには、次のようなクエリを使用します。
SELECT COUNT DISTINCT(country)
FROM customers;
その他のオプション
COUNT DISTINCT
は、GROUP BY
句と組み合わせて、グループ内の個別の値の数を検索することができます。WHERE
句を使用して、検索条件を指定することができます。
SELECT COUNT DISTINCT(country)
FROM customers
WHERE region = 'Europe';
注意事項
COUNT DISTINCT
は、NULL値を無視します。COUNT DISTINCT
は、パフォーマンスが低下する場合があります。
補足
COUNT DISTINCT
は、列内の個別の値の数を正確に返す関数です。COUNT DISTINCT
は、さまざまなデータ分析シナリオで使用することができます。
例1:COUNT DISTINCTを使用して、列内の個別の値の数を検索する
-- テーブル customers の country 列内の個別の国の数を検索する
SELECT COUNT DISTINCT(country)
FROM customers;
例2:GROUP BY 句と組み合わせて、グループ内の個別の値の数を検索する
-- テーブル customers の region 列ごとに、country 列内の個別の国の数を検索する
SELECT region, COUNT DISTINCT(country)
FROM customers
GROUP BY region;
-- テーブル customers の country 列内の、ヨーロッパ地域の個別の国の数を検索する
SELECT COUNT DISTINCT(country)
FROM customers
WHERE region = 'Europe';
例4:COUNT DISTINCTと他の集計関数を組み合わせて使用する
-- テーブル customers の country 列内の個別の国の数と、各国の顧客数を検索する
SELECT COUNT DISTINCT(country), COUNT(*)
FROM customers
GROUP BY country;
これらのサンプルコードは、COUNT DISTINCT
関数の使い方を理解するのに役立ちます。
SQLで列内の個別の値の数を検索する他の方法
GROUP BY 句とCOUNT(*)関数を使用する
SELECT COUNT(*)
FROM (
SELECT DISTINCT column_name
FROM table_name
) AS t;
サブクエリを使用する
SELECT COUNT(*)
FROM (
SELECT column_name
FROM table_name
GROUP BY column_name
) AS t;
CASE式を使用する
SELECT COUNT(*)
FROM table_name
WHERE CASE
WHEN column_name IS NULL THEN 0
ELSE 1
END
GROUP BY column_name;
これらの方法は、COUNT DISTINCT
関数よりもパフォーマンスが優れている場合がありますが、コードが複雑になる場合があります。
- どの方法を使用するかは、データの量やパフォーマンス要件などの状況によって異なります。
COUNT DISTINCT
関数は、最もシンプルで使いやすい方法です。
sql distinct