APPROX_COUNT_DISTINCT (Transact-SQL)
适用于: sql Server 2019 (15.x) Azure SQL 数据库 Azure SQL 托管实例 Microsoft Fabric Microsoft Fabric Warehouse 中的 Azure Synapse Analytics SQL 分析终结点
此函数返回组中唯一非空值的近似数。
语法
APPROX_COUNT_DISTINCT ( expression )
参数
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