跳转到主要内容

count

引入版本:v1.1.0 统计行数或非 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 设置禁用此优化。 不过,SELECT count(nullable_column) FROM table 查询也可以通过启用 optimize_functions_to_subcolumns 设置进行优化。 当 optimize_functions_to_subcolumns = 1 时,该函数只会读取 null 子列,而不是读取和处理整列数据。 查询 SELECT count(n) FROM table 会转换为 SELECT sum(NOT n.null) FROM table
提升 COUNT(DISTINCT expr) 性能如果你的 COUNT(DISTINCT expr) 查询较慢,可以考虑添加 GROUP BY 子句,这样可以提升并行化程度。 你也可以使用投影,为 COUNT(DISTINCT target_col) 中使用的目标列创建索引。
语法
count([expr])
参数
  • expr — 可选。一个表达式。该函数统计此表达式返回非 NULL 的次数。Expression
返回值 如果调用函数时不带参数,则返回行数;否则返回传入表达式返回非 NULL 的次数。UInt64 示例 基本行数统计
Query
SELECT count() FROM t
Response
┌─count()─┐
│       5 │
└─────────┘
COUNT(DISTINCT) 示例
Query
-- 此示例展示了根据 `count_distinct_implementation` 设置值,`count(DISTINCT num)` 由 `uniqExact` 函数执行。
SELECT name, value FROM system.settings WHERE name = 'count_distinct_implementation';
SELECT count(DISTINCT num) FROM t
Response
┌─name──────────────────────────┬─value─────┐
│ count_distinct_implementation │ uniqExact │
└───────────────────────────────┴───────────┘
┌─uniqExact(num)─┐
│              3 │
└────────────────┘
最后修改于 2026年6月10日