跳转到主要内容
聚合函数的工作方式与数据库专家所熟悉的常规方式一致。 ClickHouse 还支持:

NULL 处理

在聚合过程中,所有 NULL 参数都会被跳过。如果聚合有多个参数,则只要某一行中有一个或多个参数为 NULL,该行就会被忽略。 这条规则有一个例外:函数 first_valuelast_value 及其别名 (分别为 anyanyLast) 在后面跟有修饰符 RESPECT NULLS 时,不遵循这一规则。例如,FIRST_VALUE(b) RESPECT NULLS 示例: 考虑下面这张表:
假设你需要对 y 列中的值进行求和:
现在,你可以使用 groupArray 函数基于 y 列创建一个数组:
groupArray 不会在结果数组中包含 NULL 你可以使用 COALESCENULL 替换为适合你使用场景的值。例如:avg(COALESCE(column, 0)) 会在聚合中使用该列的值;如果为 NULL,则使用 0:
此外,你还可以使用 Tuple 来绕过 NULL 跳过机制。仅包含 NULL 值的 Tuple 本身并不是 NULL,因此聚合函数不会因为这个 NULL 值而跳过该行。
请注意,当列作为聚合函数的参数使用时,不会对其进行聚合。例如,不带参数的 count (count()) 或带常量参数的 count(1) 会统计块中的所有行 (与 GROUP BY 列的值无关,因为它不是参数) ,而 count(column) 只会返回 column 不为 NULL 的行数。
下面是一个使用 RESPECT NULLS 的 first_value 示例。我们可以看到,NULL 输入会被保留,返回的是读取到的第一个值,无论它是 NULL 还是非 NULL:
最后修改于 2026年7月3日