Функция arrayJoin
Это очень необычная функция.
Обычные функции не изменяют набор строк, а просто изменяют значения в каждой строке (отображение).
Агрегатные функции сжимают набор строк (сворачивание или редукция).
Функция arrayJoin берет каждую строку и генерирует набор строк (разворачивание).
Эта функция принимает массив в качестве аргумента и распространяет исходную строку на несколько строк в зависимости от количества элементов в массиве. Все значения в столбцах просто копируются, кроме значений в столбце, где применяется эта функция; оно заменяется соответствующим значением массива.
Пример:
Функция arrayJoin влияет на все части запроса, включая раздел WHERE. Обратите внимание на результат 2, хотя подзапрос вернул 1 строку.
Пример:
Запрос может использовать несколько функций arrayJoin. В этом случае преобразование выполняется несколько раз, и строки умножаются.
Пример:
Важно!
Использование нескольких arrayJoin с одним и тем же выражением может не привести к ожидаемым результатам из-за оптимизаций.
В таких случаях рассмотрите возможность изменения повторяющегося выражения массива с помощью дополнительных операций, которые не влияют на результат соединения - например, arrayJoin(arraySort(arr)), arrayJoin(arrayConcat(arr, []))
Пример:
Обратите внимание на синтаксис ARRAY JOIN в запросе SELECT, который предоставляет более широкие возможности.
ARRAY JOIN позволяет вам преобразовать несколько массивов с одинаковым количеством элементов сразу.
Пример:
Или вы можете использовать Tuple
Пример: