count
引入版本:v1.1.0
统计行数或数量。
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([expr])参数
expr— 可选。一个表达式。该函数统计此表达式返回非 NULL 的次数。Expression
返回值
如果调用函数时不带参数,则返回行数;否则返回传入表达式返回非 NULL 的次数。UInt64
示例
基本行数统计
CREATE TABLE t (num UInt8) ENGINE = Memory;
INSERT INTO t VALUES (1), (1), (2), (2), (3);
SELECT count() FROM t┌─count()─┐
│ 5 │
└─────────┘COUNT(DISTINCT) 示例
-- This example shows that `count(DISTINCT num)` is performed by the `uniqExact` function according to the `count_distinct_implementation` setting value.
SELECT name, value FROM system.settings WHERE name = 'count_distinct_implementation';
SELECT count(DISTINCT num) FROM t┌─name──────────────────────────┬─value─────┐
│ count_distinct_implementation │ uniqExact │
└───────────────────────────────┴───────────┘
┌─countDistinct(num)─┐
│ 3 │
└────────────────────┘