Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

count

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 │
└────────────────────┘
Navigation