聚合函数
聚合函数以数据库专家期望的 正常 方式工作。
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: