Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当array_CONCAT与array_AGG一起应用于非空数组时,为什么BigQuery生成空数组?_Sql_Arrays_Google Bigquery - Fatal编程技术网

Sql 当array_CONCAT与array_AGG一起应用于非空数组时,为什么BigQuery生成空数组?

Sql 当array_CONCAT与array_AGG一起应用于非空数组时,为什么BigQuery生成空数组?,sql,arrays,google-bigquery,Sql,Arrays,Google Bigquery,我在BigQuery中遇到了一个非常奇怪的行为 下面的查询生成意外的结果空数组[],因为我正在连接数组,所以我希望数组包含所有连接的元素 SELECT ARRAY_CONCAT( ( SELECT ARRAY_AGG(col1) -- This is creating an empty array since condition is always false FROM ... WHERE 1 = 2 ), ['test'

我在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

为什么第一个查询生成空数组,而它是第二个和第三个查询的组合?

这有点难以解释。第一个查询不会生成空数组。它生成一个数组列,其值为
NULL
。这就是concat返回
NULL
的原因

一般来说,没有行的子查询中的几乎聚合函数返回
NULL
。唯一的例外是
COUNT()
,它返回
0

人们很容易认为
NULL
和空数组是一回事。事实并非如此