-
COUNT ( * ) 对目标表中的所有行计数,无论它们是否包含 null 值。
-
COUNT (
expression
) 计算某个特定列或表达式中带非 NULL 值的行的数量。
-
COUNT ( DISTINCT
expression
) 计算某个列或表达式中非重复的非 NULL 值的数量。
-
APPROXIMATE COUNT DISTINCT 估算某个列或表达式中非重复的非 NULL 值的数量。
COUNT( * | expression )
COUNT ( [ DISTINCT | ALL ] expression )
APPROXIMATE COUNT ( DISTINCT expression )
DISTINCT | ALL
利用参数 DISTINCT,该函数可在执行计数之前消除指定表达式中的所有重复值。利用参数 ALL,该函数可保留表达式中的所有重复值以进行计数。ALL 是默认值。
APPROXIMATE
与 APPROXIMATE 结合使用时,COUNT DISTINCT 函数使用 HyperLogLog 算法来估算某个列或表达式中非重复的非 NULL 值的数量。使用 APPROXIMATE 关键字的查询,运行速度会快得多,错误率相对较低,约为 2%。返回大量非重复值的查询可提供近似值,每个查询或组(如果有按子句划分的组)中有几百万或更多非重复值。对于较少数量(以千为单位)的非重复值,近似值计算可能慢于精确计数。APPROXIMATE 只能与 COUNT DISTINCT 结合使用。
COUNT 函数返回 BIGINT。
对来自佛罗里达州的所有用户计数:
select count(*) from users where state='FL';
count
-------
对 EVENT 表中的所有事件名称计数:
select count(eventname) from event;
count
-------
对 EVENT 表中的所有事件名称计数:
select count(all eventname) from event;
count
-------
对 EVENT 表中的所有唯一场地 ID 计数:
select count(distinct venueid) as venues from event;
venues
--------
计算每个卖家列出 4 张以上门票出售的批次的次数。按卖家 ID 对结果进行分组:
select count(*), sellerid from listing
where numtickets > 4
group by sellerid
order by 1 desc, 2;
count | sellerid
------+----------
12 | 6386
11 | 17304
11 | 20123
11 | 25428
以下示例比较 COUNT 和 APPROXIMATE COUNT 的返回值与执行时间。
select count(distinct pricepaid) from sales;
count
-------
Time: 48.048 ms
select approximate count(distinct pricepaid) from sales;
count