APPROX_COUNT_DISTINCT (Transact-SQL)APPROX_COUNT_DISTINCT (Transact-SQL)

適用対象: noSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse APPLIES TO: noSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

この関数は、グループ内の一意の非 null 値の概数を返します。This function returns the approximate number of unique non-null values in a group.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

-- Syntax for Azure SQL Database, Azure SQL Data Warehouse and Parallel Data Warehouse  

APPROX_COUNT_DISTINCT ( expression )   

引数Arguments

式 (expression)expression
imagesql_variantntexttext を除く、任意の型のです。An expression of any type, except image, sql_variant, ntext, or text.

戻り値の型Return types

bigintbigint

RemarksRemarks

APPROX_COUNT_DISTINCT( expression ) はグループ内の各行に対して式を評価し、グループ内の一意の非 null 値の概数を返します。APPROX_COUNT_DISTINCT( expression ) evaluates an expression for each row in a group, and returns the approximate number of unique non-null values in a group. この関数は、絶対的な精度よりも応答性が重要となる場合に、大規模なデータ セット全体の集計を提供するために設計されています。This function is designed to provide aggregations across large data sets where responsiveness is more critical than absolute precision.

APPROX_COUNT_DISTINCT はビッグ データのシナリオで使用するために設計されており、次の条件に向けて最適化されています。APPROX_COUNT_DISTINCT is designed for use in big data scenarios and is optimized for the following conditions:

  • 数百万行以上のデータ セットへのアクセス、"および"Access of data sets that are millions of rows or higher and
  • 異なる値を多数持つ 1 つまたは複数の列の集計Aggregation of a column or columns that have many distinct values

97% の確率でエラー率が最大 2% 以内に収まることが、関数の実装によって保証されます。The function implementation guarantees up to a 2% error rate within a 97% probability.

APPROX_COUNT_DISTINCT に必要なメモリは、完全な COUNT DISTINCT 操作よりも少なくて済みます。APPROX_COUNT_DISTINCT requires less memory than an exhaustive COUNT DISTINCT operation. メモリの使用量が少ないため、APPROX_COUNT_DISTINCT がメモリをディスクに書き込む可能性は、正確な COUNT DISTINCT 操作に比べて小さくなります。Given the smaller memory footprint, APPROX_COUNT_DISTINCT is less likely to spill memory to disk compared to a precise COUNT DISTINCT operation. これを実現するために使用されるアルゴリズムの詳細については、「HyperLogLog」をご覧ください。To learn more about the algorithm used to achieve this, see HyperLogLog.

注意

照合順序に依存する文字列では、APPROX_COUNT_DISTINCT ではバイナリ一致が使用され、BIN 照合順序がある場合 (BIN2 はなし) に生成されるのと同じ結果が提供されます。With collation sensitive strings, APPROX_COUNT_DISTINCT uses a binary match and provides results that would have been generated in the presence of BIN collations and not BIN2.

使用例Examples

A.A. APPROX_COUNT_DISTINCT を使用するUsing APPROX_COUNT_DISTINCT

この例では、orders テーブルのさまざまな順序キーの概数が返されます。This example returns the approximate number of different order keys from the orders table.

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

以下に結果セットを示します。Here is the result set.

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

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

この例では、orders テーブルのさまざまな順序キーの概数が、順序のステータスによって返されます。This example returns the approximate number of different order keys by order status from the orders table.

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

以下に結果セットを示します。Here is the result set.

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

参照See also

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