跳到主要内容
跳到主要内容

聚合函数

聚合函数以数据库专家期望的 正常 方式工作。

ClickHouse 也支持:

NULL 处理

在聚合过程中,所有 NULL 参数都会被跳过。如果聚合有多个参数,它将忽略任何包含一个或多个 NULL 的行。

这个规则有一个例外,即函数 first_valuelast_value 及其别名(分别为 anyanyLast),当后面加上修饰符 RESPECT NULLS 时。例如,FIRST_VALUE(b) RESPECT NULLS

示例:

考虑这个表:

假设您需要对 y 列中的值进行求和:

现在您可以使用 groupArray 函数从 y 列创建一个数组:

groupArray 不会在结果数组中包含 NULL

您可以使用 COALESCE 将 NULL 更改为在您的用例中有意义的值。例如:avg(COALESCE(column, 0)) 在聚合中使用列值或零(如果为 NULL):

您还可以使用 Tuple 来解决 NULL 跳过的行为。一个仅包含 NULL 值的 Tuple 并不是 NULL,因此聚合函数不会因为该 NULL 值跳过该行。

注意,当列作为聚合函数的参数时,聚合会被跳过。例如,countcount())没有参数或常量参数(count(1))将计算块中的所有行(不依赖于 GROUP BY 列的值,因为它不是参数),而 count(column) 仅返回列不为 NULL 的行数。

这里是使用 RESPECT NULLSfirst_value 示例,我们可以看到 NULL 输入被尊重并且将返回读取的第一个值,无论它是否为 NULL: