[英]Array column and aggregation in BigQuery SQL: Why the values are not all aggregated?
我在BigQuery中執行了下面的代碼
SELECT ( --inner query
SELECT STRING_AGG(c) FROM t1.array_column c
)
FROM (
select 1 as f1, ['1','2','3'] as array_column
union all
select 2 as f1, ['5','6','7'] as array_column
) t1;
我期待類似的東西
Row|f0_
1 | 1,2,3,4,5,6,7
因為內部查詢中沒有GROUP BY
。 所以,我期待在所有線路上評估STRING_AGG
。
SELECT STRING_AGG(c) FROM t1.array_column c
相反,我得到這樣的東西:
Row|f0_
1 |1,2,3
2 |5,6,7
我有麻煩理解為什么我有這個結果
以下是BigQuery Standard SQL
#standardSQL
SELECT STRING_AGG((SELECT STRING_AGG(c) FROM t1.array_column c))
FROM (
SELECT 1 AS f1, ['1','2','3'] AS array_column UNION ALL
SELECT 2 AS f1, ['5','6','7'] AS array_column
) t1
並生產
Row f0_
1 1,2,3,5,6,7
注1:你幾乎就在那里 - 你只是缺少額外的STRING_AGG
,它會對每行中各自數組創建的字符串進行最后的分組
注意2:因為array_column
屬於ARRAY類型,所以它被視為內部表,引用為t1.array_column
,因為 - FROM t1.array_column c
相當於FROM UNNEST(array_column) c
- 非常酷的hidden
功能:o)
這是您的查詢:
SELECT (SELECT STRING_AGG(c) FROM t1.array_column c
)
FROM (select 1 as f1, ['1', '2', '3'] as array_column
union all
select 2 as f1, ['5', '6', '7'] as array_column
) t1;
首先,我很驚訝它有效。 我以為你需要unnest()
:
SELECT (SELECT STRING_AGG(c) FROM UNNEST(t1.array_column) c
)
怎么了? 好吧,如果你選擇f1
,這將更加明顯。 然后你會得到:
1 1,2,3
2 5,6,7
這應該更清楚。 對於t1
每一行(並且有兩行),您的代碼是:
c
的列將數組排除在行之外。 如果要組合數組中的元素,請使用array_concat_agg()
:
SELECT array_concat_agg(array_column)
FROM (select 1 as f1, ['1','2','3'] as array_column
union all
select 2 as f1, ['5','6','7'] as array_column
) t1;
如果您希望將其表示為字符串而不是數組,請使用array_to_string()
:
SELECT array_to_string(array_concat_agg(array_column), ',')
FROM (select 1 as f1, ['1','2','3'] as array_column
union all
select 2 as f1, ['5','6','7'] as array_column
) t1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.