COUNT DISTINCT関数とその他の集計関数の比較

2024-04-05

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


SQL ServerでストアドプロシージャをBEGIN/END TRANSACTION内で実行する方法

SQL Server では、BEGIN/END TRANSACTION ブロックを使用して、複数の Transact-SQL ステートメントを単一のトランザクションとしてグループ化できます。トランザクションは、原子性、一貫性、分離性、永続性 (ACID) の4つの特性を持つ処理単位です。...


CASE式で月番号を月名に変換する (SQL Server / T-SQL)

MONTH関数は、指定された日付の月番号を返します。この関数は単独で使用することはできませんが、他の関数と組み合わせて月名を返すことができます。例:DATENAME関数は、日付のさまざまな部分の名前を返します。月名を返すには、month パラメータを使用します。...


SQL Server 2005でMySQLのgroup_concat関数をシミュレートする方法

MySQL の group_concat 関数は、グループ化された行の列値を連結して、1つの文字列として返します。SQL Server 2005 には同等の関数はありませんが、いくつかの方法で同様の機能を実現できます。この方法は、FOR XML PATH('') を使用して、グループ化された行の列値を XML 形式に変換し、その後、value() 関数を使用して、連結された文字列を取得します。...


SQLとOracleにおけるテーブル名の引用符のまとめ

特殊文字を含むテーブル名を指定できる通常、テーブル名は大文字小文字を区別せず、空白や特殊文字を使用できません。しかし、二重引用符で囲むことで、これらの制限を回避できます。例:この例では、テーブル名に空白を含むため、二重引用符で囲んでいます。...


PostgreSQLで重複行を削除する方法|3つの基本的な方法と応用例

DISTINCT句を使用する最も簡単な方法は、DISTINCT 句を使用することです。このクエリは、table_name テーブルからすべての列の値を返し、重複する行は除外します。利点:シンプルで分かりやすい少ないコードで記述できるすべての列で重複を判断する必要がある...