У меня есть таблица, которая выглядит следующим образом:
Затем я пытаюсь объединить 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
И вывод выглядит так:
Но в выводе я ожидалcombined_labels
будет [2,2,23,24]
для идентификатора xyz
.
Параметр ignore nulls
не работает в array_concat
.Я предполагаю, что как-то combined_labels
искажается из-за пустого массива в label3
.Как я могу получить ожидаемое combined_labels
для xyz
равным [2,2,23,24]
?