首批通过分布式安全可靠测评,为关键业务系统打造
APPROX_COUNT_DISTINCT
更新时间:2026-04-30 18:31:43
描述
该函数对参数列去重后的行数进行计算,返回行数值,且该值是近似值,该函数可以用于进一步计算被引用的列的选择性。
与函数 COUNT(DISTINCT x) 相比,APPROX_COUNT_DISTINCT 返回的是近似值,所以计算速度极快。在处理大量级的数据时 COUNT(DISTINCT x) 经常要花费很长的时间,使用 APPROX_COUNT_DISTINCT 牺牲了少量的精确度,却换来了计算效率的极大提升。
语法
APPROX_COUNT_DISTINCT(expr)
参数解释
expr 表示去重的数值列。
返回类型
返回 NUMBER 类型数据。
示例
创建表 tbl1,并插入十条数据。
obclient> CREATE TABLE tbl1 (col1 INT,col2 INT,col3 varchar(10));
Query OK, 0 rows affected
obclient> INSERT INTO tbl1 VALUES (1,10,'a'),(2,20,'b'),(3,30,'c'),
(4,40,'a'),(5,50,'c'),(1,10,'a'),(2,20,'b'),(3,30,'c'),(4,30,'a'),(5,40,'b');
Query OK, 10 rows affected
Records: 10 Duplicates: 0 Warnings: 0
返回列
col2不重复值的个数。obclient> SELECT APPROX_COUNT_DISTINCT(col2) FROM tbl1; +-----------------------------+ | APPROX_COUNT_DISTINCT(COL2) | +-----------------------------+ | 5 | +-----------------------------+ 1 row in set以列
col1和列col2分组去重后,统计列col1中各数值的个数。obclient> SELECT col1,APPROX_COUNT_DISTINCT(col2) FROM tbl1 GROUP BY col1; +------+-----------------------------+ | COL1 | APPROX_COUNT_DISTINCT(COL2) | +------+-----------------------------+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 2 | +------+-----------------------------+ 5 rows in set以列
col1、列col2和col3分组去重后,统计列col1和列col3组合值的个数。obclient> SELECT col1,col3,APPROX_COUNT_DISTINCT(col2) FROM tbl1 GROUP BY col1,col3; +------+------+-----------------------------+ | COL1 | COL3 | APPROX_COUNT_DISTINCT(COL2) | +------+------+-----------------------------+ | 1 | a | 1 | | 2 | b | 1 | | 3 | c | 1 | | 4 | a | 2 | | 5 | b | 1 | | 5 | c | 1 | +------+------+-----------------------------+ 6 rows in set