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,则使用 0:
NULL 跳过机制。仅包含 NULL 值的 Tuple 本身并不是 NULL,因此聚合函数不会因为这个 NULL 值而跳过该行。
count (count()) 或带常量参数的 count(1) 会统计块中的所有行 (与 GROUP BY 列的值无关,因为它不是参数) ,而 count(column) 只会返回 column 不为 NULL 的行数。
RESPECT NULLS 的 first_value 示例。我们可以看到,NULL 输入会被保留,返回的是读取到的第一个值,无论它是 NULL 还是非 NULL: