ClickHouse/docs/zh/sql-reference/aggregate-functions/reference/count.md
2022-08-26 15:07:59 -04:00

2.4 KiB
Raw Blame History

slug sidebar_position
/zh/sql-reference/aggregate-functions/reference/count 1

count

计数行数或非空值。

ClickHouse支持以下 count 语法:

  • count(expr)COUNT(DISTINCT expr)
  • count()COUNT(*). 该 count() 语法是ClickHouse特定的。

参数

该函数可以采取:

返回值

  • 如果没有参数调用函数,它会计算行数。
  • 如果 表达式 被传递则该函数计数此表达式返回非null的次数。 如果表达式返回 可为空类型的值,count的结果仍然不 Nullable。 如果表达式对于所有的行都返回 NULL ,则该函数返回 0 。

在这两种情况下,返回值的类型为 UInt64

详细信息

ClickHouse支持 COUNT(DISTINCT ...) 语法,这种结构的行为取决于 count_distinct_implementation 设置。 它定义了用于执行该操作的 uniq*函数。 默认值是 uniqExact函数。

SELECT count() FROM table 这个查询未被优化,因为表中的条目数没有单独存储。 它从表中选择一个小列并计算其值的个数。

示例

示例1:

SELECT count() FROM t
┌─count()─┐
│       5 │
└─────────┘

示例2:

SELECT name, value FROM system.settings WHERE name = 'count_distinct_implementation'
┌─name──────────────────────────┬─value─────┐
│ count_distinct_implementation │ uniqExact │
└───────────────────────────────┴───────────┘
SELECT count(DISTINCT num) FROM t
┌─uniqExact(num)─┐
│              3 │
└────────────────┘

这个例子表明 count(DISTINCT num) 是通过 count_distinct_implementation 的设定值 uniqExact 函数来执行的。