適用於:SQL Server 2019 (15.x)
Azure SQL Database
AzureSQL Managed Instance
Azure Synapse Analytics
SQL Analytics endpoint in Microsoft Fabric Warehouse
in Microsoft Fabric
SQL database in Microsoft Fabric
此函式會傳回群組中非 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