APPROX_COUNT_DISTINCT (Transact-SQL)

適用対象:SQL Server 2019 (15.x)Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

この関数は、グループ内の一意の非 null 値の概数を返します。

Transact-SQL 構文表記規則

構文

APPROX_COUNT_DISTINCT ( expression )   

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

式 (expression)
imagesql_variantntexttext を除く、任意の型のです。

戻り値の型

bigint

解説

APPROX_COUNT_DISTINCT( expression ) はグループ内の各行に対して式を評価し、グループ内の一意の非 null 値の概数を返します。 この関数は、絶対的な精度よりも応答性が重要となる場合に、大規模なデータ セット全体の集計を提供するために設計されています。

APPROX_COUNT_DISTINCT はビッグ データのシナリオで使用するために設計されており、次の条件に向けて最適化されています。

  • 数百万行以上のデータ セットへのアクセス、"および"
  • 異なる値を多数持つ 1 つまたは複数の列の集計

97% の確率でエラー率が最大 2% 以内に収まることが、関数の実装によって保証されます。

APPROX_COUNT_DISTINCT に必要なメモリは、完全な COUNT DISTINCT 操作よりも少なくて済みます。 メモリの使用量が少ないため、APPROX_COUNT_DISTINCT がメモリをディスクに書き込む可能性は、正確な COUNT DISTINCT 操作に比べて小さくなります。 これを実現するために使用されるアルゴリズムの詳細については、「HyperLogLog」をご覧ください。

注意

照合順序に依存する文字列では、APPROX_COUNT_DISTINCT ではバイナリ一致が使用され、BIN 照合順序がある場合 (BIN2 はなし) に生成されるのと同じ結果が提供されます。

A. APPROX_COUNT_DISTINCT を使用する

この例では、orders テーブルのさまざまな順序キーの概数が返されます。

SELECT APPROX_COUNT_DISTINCT(O_OrderKey) AS Approx_Distinct_OrderKey
FROM dbo.Orders;

結果セットは次のようになります。

Approx_Distinct_OrderKey
------------------------
15164704

B. GROUP BY と共に APPROX_COUNT_DISTINCT を使用する

この例では、orders テーブルのさまざまな順序キーの概数が、順序のステータスによって返されます。

SELECT O_OrderStatus, APPROX_COUNT_DISTINCT(O_OrderKey) AS Approx_Distinct_OrderKey
FROM dbo.Orders
GROUP BY O_OrderStatus
ORDER BY O_OrderStatus; 

結果セットは次のようになります。

O_OrderStatus                                                    Approx_Distinct_OrderKey
---------------------------------------------------------------- ------------------------
F                                                                7397838
O                                                                7387803
P                                                                388036

関連項目

集計関数 (Transact-SQL)
COUNT (Transact-SQL)