count
count
引入版本:v1.1
统计行数或非 NULL 值的个数。
ClickHouse 支持以下 count 语法:
count(expr)或COUNT(DISTINCT expr)。count()或COUNT(*)。count()语法是 ClickHouse 特有的。
详情
ClickHouse 支持 COUNT(DISTINCT ...) 语法。
这种结构的行为取决于 count_distinct_implementation 设置。
它定义了使用哪个 uniq* 函数来执行该操作。
默认使用 uniqExact 函数。
SELECT count() FROM table 查询默认使用来自 MergeTree 的元数据进行优化。
如果需要使用行级安全性,请通过 optimize_trivial_count_query 设置来禁用该优化。
不过,可以通过启用 optimize_functions_to_subcolumns 设置来优化 SELECT count(nullable_column) FROM table 查询。
在 optimize_functions_to_subcolumns = 1 的情况下,函数只读取 null 子列,而不是读取和处理整个列数据。
查询 SELECT count(n) FROM table 会被转换为 SELECT sum(NOT n.null) FROM table。
如果 COUNT(DISTINCT expr) 查询较慢,可以考虑添加 GROUP BY 子句,因为这可以提升并行执行效率。
也可以使用 projection 在与 COUNT(DISTINCT target_col) 一起使用的目标列上创建索引。
语法
参数
expr— 可选。一个表达式。该函数会统计该表达式返回非 null 值的次数。Expression
返回值
如果在无参数的情况下调用函数,则返回行数;否则返回传入表达式结果为非 null 值的次数。UInt64
示例
基础行数统计
COUNT(DISTINCT) 示例