'ClickHouse: groupArray inside groupArray
table
CREATE TABLE test
(
uid UUID,
agc Int64,
stc Int8,
oci Int32,
sci Int32,
fcd String,
prc Float64
) engine = MergeTree()
ORDER BY (agc, oci);
base query
SELECT fcd, groupArray((agc, stc, oci, sci, (uid, prc))) as arr
FROM test
GROUP BY fcd;
next, I want to group groupArray by the first 4 values, like this (i know what groupArray cannot nest groupArray)
SELECT fcd, groupArray(groupArray(agc, stc, oci, sci)), (uid, prc))) as arr
example output
| fcd | groupArray(groupArray(agc, stc, oci, sci)), (uid, prc))) |
|---|---|
| 'str' | [(1, 1, 1, 2, [(id1, 10), (id2, 15)]), (1, 1, 1, 2, [(id3, 13), (id3, 11)])] |
Solution 1:[1]
Try this query:
SELECT arrayJoin(arr_result) AS result
FROM
(
SELECT
id,
groupArray((v2, v3)) AS arr1,
groupArray((v4, v5)) AS arr2,
arrayMap(x -> (untuple(x), arr2), arr1) AS arr_result
FROM
(
SELECT
number % 2 AS id,
number AS v2,
number AS v3,
number AS v4,
number AS v5
FROM numbers(4)
)
GROUP BY id
)
/*
??result???????????????
? (0,0,[(0,0),(2,2)]) ?
? (2,2,[(0,0),(2,2)]) ?
? (1,1,[(1,1),(3,3)]) ?
? (3,3,[(1,1),(3,3)]) ?
???????????????????????
*/
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | vladimir |
