WITH data AS (
SELECT 1 a, [1,2,3] arr1, ['a','b','c'] arr2
)
Каков результат добавления всех чисел из arr1?
SELECT SUM(a1) sum
FROM data, UNNEST(arr1) a1
Ответ 6. Но что если мы сделаем это:
SELECT SUM(a1) sum, MAX(a2)
FROM data, UNNEST(arr1) a1, UNNEST(arr2)
18 c
Ответ сейчас 18 - но это не правильно! Что ж, это правильный ответ после того, как мы выполним CROSS JOIN
с arr2 - но результаты нас удивят.
Так, как правильно получить MAX
от arr2 и SUM
от arr1?
SELECT (SELECT SUM(a1) FROM UNNEST(arr1) a1)
, (SELECT MAX(a2) FROM UNNEST(arr2) a2)
FROM data
6 c
Урок здесь: Избегайте «взрывающихся соединений» от выполнения CROSS JOIN
между вложенными массивами - сохраняйте их как массивы, пока они вам не понадобятся.