我有一个看起来像这样的表:
然后我尝试将 label1、label2、label3 聚合到每种类型标签的一个数组中,最后我想将所有非空标签放入一个组合数组中。所以我的查询看起来像这样
#standardSQL
WITH
table AS (
SELECT 'abc' id, 1 label1, 12 label2, 122 label3 UNION ALL
SELECT 'abc', 1, 12, 129 UNION ALL
SELECT 'xyz', 2, 23, NULL UNION ALL
SELECT 'xyz', 2, 24, NULL
),
each_label_agg AS (
SELECT
id,
ARRAY_AGG(label1 IGNORE NULLS) AS label1_agg,
ARRAY_AGG(label2 IGNORE NULLS) AS label2_agg,
ARRAY_AGG(label3 IGNORE NULLS) AS label3_agg
FROM
table
GROUP BY
id)
SELECT
each_label_agg.*,
ARRAY_CONCAT(each_label_agg.label1_agg, each_label_agg.label2_agg,
each_label_agg.label3_agg) AS combined_labels
FROM
each_label_agg
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
但在输出中我combined_labels期望[2,2,23,24]id xyz。
该ignore nulls参数在array_concat. 我猜测combined_labels由于 处的空数组而导致格式错误label3。我怎样才能得到预期的combined_labels结果?xyz[2,2,23,24]
#standardSQL
WITH table AS (
SELECT 'abc' id, 1 label1, 12 label2, 122 label3 UNION ALL
SELECT 'abc', 1, 12, 129 UNION ALL
SELECT 'xyz', 2, 23, NULL UNION ALL
SELECT 'xyz', 2, 24, NULL
), each_label_agg AS (
SELECT
id,
ARRAY_AGG(label1 IGNORE NULLS) AS label1_agg,
ARRAY_AGG(label2 IGNORE NULLS) AS label2_agg,
ARRAY_AGG(label3 IGNORE NULLS) AS label3_agg
FROM table
GROUP BY id
)
SELECT
each_label_agg.*,
ARRAY_CONCAT(
IFNULL(each_label_agg.label1_agg, []),
IFNULL(each_label_agg.label2_agg, []),
IFNULL(each_label_agg.label3_agg, [])
) AS combined_labels
FROM each_label_agg
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2624 次 |
| 最近记录: |