聚合函数
聚合函数的工作方式与数据库专家所期望的 正常 方式一致。
ClickHouse 还支持:
NULL 处理
在聚合过程中,所有 NULL
参数都会被跳过。如果聚合有多个参数,它将忽略任何一行中有一个或多个参数为 NULL 的情况。
这个规则有一个例外,即 first_value
、last_value
函数及其别名(分别为 any
和 anyLast
)在跟随修饰符 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: