我在bigquery中遇到了一个非常奇怪的行为。
以下查询生成意外的结果空数组 []
,因为我要连接数组,所以我期望一个数组包含所有要连接的元素。
SELECT ARRAY_CONCAT(
(
SELECT ARRAY_AGG(col1) -- This is creating an empty array since condition is always false
FROM ...
WHERE 1 = 2
),
['test']
)
而一个非常相似的查询会产生预期的结果 ['test']
:
SELECT ARRAY_CONCAT(
[],
['test']
)
array_agg()确实生成一个空数组 []
:
SELECT ARRAY_AGG(col1) -- This is creating an empty array since condition is always false
FROM ...
WHERE 1 = 2
为什么第一个查询生成空数组,而它是第二个和第三个查询的组合?
1条答案
按热度按时间hfyxw5xn1#
这有点难解释。第一个查询不会生成空数组。它生成一个数组列,其值为
NULL
. 这就是concat返回的原因NULL
.作为一般规则,几乎没有行的子查询中的聚合函数返回
NULL
. 唯一的例外是COUNT()
它回来了0
.很容易想到
NULL
和空数组是一样的。他们不是。