Можно ли создать плоский массив из результатов запроса в Clickhouse? - PullRequest
1 голос
/ 09 июля 2020

Запрос

select *
from (
    select [1] a
    union all
    select [1,2] a
    union all
    select [2] a
) q;

Результат (3 строки)

[1]
[1,2]
[2]

Ожидаемый результат (1 строка)

[1,1,2,2]

Возможно?

Ответы [ 2 ]

2 голосов
/ 09 июля 2020

Альтернативный способ использования Массив -комбинатор:

SELECT groupArrayArray(*)
FROM 
(
    SELECT [1] AS a
    UNION ALL
    SELECT [1, 2] AS a
    UNION ALL
    SELECT [2] AS a
) AS q
/* result
┌─groupArrayArray(a)─┐
│ [1,1,2,2]          │
└────────────────────┘
*/
1 голос
/ 09 июля 2020

Да, конечно. Вам просто нужна пара функций массива.

select arrayFlatten(groupArray(*))
from (
    select [1] a
    union all
    select [1,2] a
    union all
    select [2] a
) q;

groupyArray дает вам [[1],[1,2],[2]], по сути группируя все результаты в один массив. arrayFlatten сглаживает вышеуказанный массив, в результате получается [1,1,2,2].

...