使用 2 个数组聚合并保留贡献信息
Aggregate using 2 arrays and keep contribution information
问题
想要聚合行,但仍保留有关行如何影响最终总和的信息。
信息在两个数组中,但无法弄清楚如何聚合它并保留信息。
架构和示例数据(已简化)
CREATE TABLE A
(
Groupkey Int32,
Sizename String,
Givenqty Array(int),
Category Array(int)
) Engine = Memory ;
INSERT INTO A VALUES (1, 'XS', [1], [154]);
INSERT INTO A VALUES (1, 'M', [1], [154]);
INSERT INTO A VALUES (1, 'L', [1], [154]);
INSERT INTO A VALUES (1, 'XL', [1,1,2,1,1], [145,145,146,154,145]);
SELECT * FROM A:
想要的结果
我想要 1 个总和为“givenqty pr category”的行。
结果应该是:(145 = 3, 146 = 2, 154= 4):
在进行查询时,我知道“类别”列的可能结果,因此我们可以使用此信息按索引添加值(按类别编号排序)。
数据中的类别数量可以是随机的,但查询数据时可以知道完整的范围(如果解决方案需要,可以用作帮助数组)。
我尝试了不同种类的 groupArray、元组等,但似乎无法解决:/
尝试这样使用聚合函数sumMap:
SELECT
groupKey,
sumMap(category, givenqty) AS summap,
summap.2 AS result
FROM
(
/* Emulate the test dataset. */
SELECT
data.1 AS groupKey,
data.2 AS givenqty,
data.3 AS category
FROM
(
SELECT arrayJoin([(1, [1], [154]), (1, [1], [154]), (1, [1], [154]), (1, [1, 1, 2, 1, 1], [145, 145, 146, 154, 145])]) AS data
)
)
GROUP BY groupKey
/*
┌─groupKey─┬─summap──────────────────┬─result──┐
│ 1 │ ([145,146,154],[3,2,4]) │ [3,2,4] │
└──────────┴─────────────────────────┴─────────┘
*/
问题
想要聚合行,但仍保留有关行如何影响最终总和的信息。
信息在两个数组中,但无法弄清楚如何聚合它并保留信息。
架构和示例数据(已简化)
CREATE TABLE A
(
Groupkey Int32,
Sizename String,
Givenqty Array(int),
Category Array(int)
) Engine = Memory ;
INSERT INTO A VALUES (1, 'XS', [1], [154]);
INSERT INTO A VALUES (1, 'M', [1], [154]);
INSERT INTO A VALUES (1, 'L', [1], [154]);
INSERT INTO A VALUES (1, 'XL', [1,1,2,1,1], [145,145,146,154,145]);
SELECT * FROM A:
想要的结果
我想要 1 个总和为“givenqty pr category”的行。
结果应该是:(145 = 3, 146 = 2, 154= 4):
在进行查询时,我知道“类别”列的可能结果,因此我们可以使用此信息按索引添加值(按类别编号排序)。
数据中的类别数量可以是随机的,但查询数据时可以知道完整的范围(如果解决方案需要,可以用作帮助数组)。
我尝试了不同种类的 groupArray、元组等,但似乎无法解决:/
尝试这样使用聚合函数sumMap:
SELECT
groupKey,
sumMap(category, givenqty) AS summap,
summap.2 AS result
FROM
(
/* Emulate the test dataset. */
SELECT
data.1 AS groupKey,
data.2 AS givenqty,
data.3 AS category
FROM
(
SELECT arrayJoin([(1, [1], [154]), (1, [1], [154]), (1, [1], [154]), (1, [1, 1, 2, 1, 1], [145, 145, 146, 154, 145])]) AS data
)
)
GROUP BY groupKey
/*
┌─groupKey─┬─summap──────────────────┬─result──┐
│ 1 │ ([145,146,154],[3,2,4]) │ [3,2,4] │
└──────────┴─────────────────────────┴─────────┘
*/