分享方式:


APPROX_COUNT_DISTINCT (Transact-SQL)

適用於: Microsoft Fabric Microsoft網狀架構倉儲中的 SQL Server 2019 (15.x) Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics SQL 分析端點

此函式會傳回群組中非 Null 的唯一值的近似數目。

Transact-SQL 語法慣例 (部分機器翻譯)

語法

APPROX_COUNT_DISTINCT ( expression )   

引數

expression
任何類型的運算式但除了 imagesql_variantntexttext之外。

傳回類型

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

另請參閱

彙總函式 (Transact-SQL)
COUNT (Transact-SQL)