APPROX_COUNT_DISTINCT (Transact-SQL)

适用于:SQL Server 2019 (15.x) Azure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsMicrosoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库

此函数返回组中唯一非空值的近似数。

Transact-SQL 语法约定

语法

APPROX_COUNT_DISTINCT ( expression )   

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

自变量

expression
任意类型(“image” 、“sql_variant” 、“ntext” 或“text” 除外)的 表达式

返回类型

bigint

备注

APPROX_COUNT_DISTINCT( expression ) 计算组中每行的表达式,并返回组中唯一非空值的近似数。 此函数旨在跨响应速度比绝对精度更为关键的大型数据集进行聚合。

APPROX_COUNT_DISTINCT 专用于大数据方案,更适合以下情形:

  • 访问包含数百万行或更多行的数据集,且
  • 聚合包含多个非重复值的一个或多个列

此函数实现可保证最多 2% 的错误率,概率在 97% 内。

与详尽 COUNT DISTINCT 操作相比,APPROX_COUNT_DISTINCT 需要的内存更少。 与精确 COUNT DISTINCT 操作相比,鉴于 APPROX_COUNT_DISTINCT 占用的内存更少,因此它不太可能会将内存溢出到磁盘。 若要详细了解用于实现此目的的算法,请参阅 HyperLogLog

备注

使用排序规则敏感字符串,APPROX_COUNT_DISTINCT 使用二进制匹配,生成的结果与在有 BIN 排序规则(而不是 BIN2)的情况下一致。

示例

A. 使用 APPROX_COUNT_DISTINCT

此示例返回订单表中不同订单键的近似数。

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

下面是结果集:

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

B. 结合使用 APPROX_COUNT_DISTINCT 和 GROUP BY

此示例按订单状态返回订单表中不同订单键的近似数。

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)