APPROX_COUNT_DISTINCT (Transact-SQL)
適用於: sql Server 2019 (15.x) Azure SQL 資料庫 Azure SQL 受控執行個體 Microsoft Fabric Microsoft Fabric 倉儲中的 Azure Synapse Analytics SQL 分析端點
此函式會傳回群組中非 Null 的唯一值的近似數目。
Transact-SQL 語法慣例 (部分機器翻譯)
語法
APPROX_COUNT_DISTINCT ( expression )
引數
expression
任何類型的運算式但除了 image、sql_variant、ntext或 text之外。
傳回類型
bigint
備註
APPROX_COUNT_DISTINCT( expression )
會針對群組中的每個資料列評估運算式,然後傳回群組中非 Null 的唯一值的近似數目。 設計此函式的目的是提供大型資料集之間的彙總,在此情況下回應性比絕對精確度更重要。
APPROX_COUNT_DISTINCT
是針對用於大型資料的案例而設計,且已針對以下條件最佳化:
- 存取有數百萬資料行或更多 and 的資料集
- 資料行的彙總,或是有需多不同值的資料行的彙總
函式實作保證在 97% 機率內最多 2% 的錯誤率。
APPROX_COUNT_DISTINCT
所需的記憶體比徹底的 COUNT DISTINCT 作業更少。 因為磁碟使用量較小,所以相較於精確的 COUNT DISTINCT 作業,APPROX_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. 搭配使用 APPROX_COUNT_DISTINCT 和 GROUP BY
此範例會從 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