假设以下查询(从更复杂的查询简化而来):
SELECT ARRAY_CONCAT([1, 2], [3, 4], [5, 6]) as count_to_six;
Run Code Online (Sandbox Code Playgroud)
结果是数组 [1,2,3,4,5,6]
在以下查询中重新编写(使用WITH语句)会导致错误“ARRAY_CONCAT(或ARRAY_CONCAT_AGG)的参数必须是数组类型,但在[3:8]处是STRUCT、ARRAY、ARRAY>”
WITH q1 AS
(SELECT ([1, 2], [3, 4], [5, 6]) as count_to_six)
SELECT ARRAY_CONCAT(count_to_six) FROM q1
Run Code Online (Sandbox Code Playgroud)
我的问题是:在“WITH AS”查询中,如何获得与初始查询具有相同结果的正确查询?
在逗号分隔列表周围使用括号会创建一个结构体,因此示例中的WITH子句将创建一个具有三个数组字段的结构体。你可以这样做:
WITH q1 AS (
SELECT [1, 2] AS count_to_six UNION ALL
SELECT [3, 4] UNION ALL
SELECT [5, 6]
)
SELECT ARRAY_CONCAT_AGG(count_to_six)
FROM q1
Run Code Online (Sandbox Code Playgroud)
这会在WITH子句中创建三行输入,每行都有一个包含两个元素的数组,然后将它们连接成一个数组。请注意,尽管如此,除非您以某种方式利用 中的 ORDER BY 子句,否则不能保证数组的顺序ARRAY_CONCAT_AGG。
如果您确实想使用ARRAY_CONCAT,则需要命名结构体的每个字段,然后在函数调用中引用它:
WITH q1 AS (
SELECT STRUCT([1, 2] AS x, [3, 4] AS y, [5, 6] AS z) AS count_to_six
)
SELECT
ARRAY_CONCAT(count_to_six.x, count_to_six.y, count_to_six.z)
FROM q1
Run Code Online (Sandbox Code Playgroud)
在这种情况下,结果数组中元素的顺序是明确定义的。
| 归档时间: |
|
| 查看次数: |
11856 次 |
| 最近记录: |