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

聚合函数

聚合函数的工作方式与数据库专家所期望的 正常 方式一致。

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 值而跳过那一行。

请注意,当列作为聚合函数的参数使用时,聚合会被跳过。例如,没有参数的 count (count()) 或常量参数的 (count(1)) 将计算块中的所有行(无论 GROUP BY 列的值,因为它不是一个参数),而 count(column) 只会返回列不为 NULL 的行数。

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