APPROX_COUNT_DISTINCT (Transact-SQL)
適用対象: SQL Server 2019 (15.x) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric のウェアハウス
この関数は、グループ内の一意の非 null 値の概数を返します。
構文
APPROX_COUNT_DISTINCT ( expression )
引数
式 (expression)
image、sql_variant、ntext、text を除く、任意の型の式です。
戻り値の型
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