适用于: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
此函数返回组中唯一非空值的近似数。
语法
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