【发布时间】:2020-10-29 19:28:53
【问题描述】:
查询
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]
有可能吗?
【问题讨论】:
标签: clickhouse
查询
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]
有可能吗?
【问题讨论】:
标签: clickhouse
是的,当然。你只需要几个数组函数。
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]。
【讨论】:
使用Array-combinator 的替代方式:
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] │
└────────────────────┘
*/
【讨论】: