ClickHouse - 如何使用另一个数组中的键对嵌套地图求和?
ClickHouse - How to sum nested map, with keys from another array?
我有以下 table,其中 names
是一个名称数组,data
是一个映射:
names
data
[['James', 'Scott'], ['James', 'Scott']]
[[{'sales': 20.0}, {'sales': 20.0}], [{'sales': 25.0}, {'sales': 15.0}]]
我想做的是将映射中的每个条目与对应的名称相加,得到以下结果:
names
data
['James', 'Scott']
[{'sales': 45.0}, {'sales': 35.0}]
create table i_hate_people_who_answer_questions(
names Array(Array(String)),
data Array(Array(Map(String, Float64)))
)
Engine=Memory;
insert into i_hate_people_who_answer_questions
values( [['James', 'Scott'], ['James', 'Scott']], [[map('sales', 20.0), map('sales', 20.0)], [map('sales', 25.0), map('sales', 15.0)]] ) ;
我试过 sumMap(names, data)
但这不起作用,因为 data
是另一个映射并且此函数需要原始数据类型,给出以下错误:"Illegal type Map(String, Decimal(38, 2)) of argument for aggregate function sum."
如有任何帮助,我们将不胜感激。
SELECT
__names,
sumMap(__data)
FROM
(
SELECT
__names,
__data
FROM
(
SELECT
_names,
_data
FROM i_hate_people_who_answer_questions
ARRAY JOIN
names AS _names,
data AS _data
)
ARRAY JOIN
_names AS __names,
_data AS __data
)
GROUP BY __names
┌─__names─┬─sumMap(__data)─┐
│ James │ {'sales':45} │
│ Scott │ {'sales':35} │
└─────────┴────────────────┘
SELECT
groupArray(__names),
groupArray(___data)
FROM
(
SELECT
__names,
sumMap(__data) AS ___data
FROM
(
SELECT
__names,
__data
FROM
(
SELECT
_names,
_data
FROM i_hate_people_who_answer_questions
ARRAY JOIN
names AS _names,
data AS _data
)
ARRAY JOIN
_names AS __names,
_data AS __data
)
GROUP BY __names
)
┌─groupArray(__names)─┬─groupArray(___data)─────────┐
│ ['James','Scott'] │ [{'sales':45},{'sales':35}] │
└─────────────────────┴─────────────────────────────┘
我有以下 table,其中 names
是一个名称数组,data
是一个映射:
names | data |
---|---|
[['James', 'Scott'], ['James', 'Scott']] | [[{'sales': 20.0}, {'sales': 20.0}], [{'sales': 25.0}, {'sales': 15.0}]] |
我想做的是将映射中的每个条目与对应的名称相加,得到以下结果:
names | data |
---|---|
['James', 'Scott'] | [{'sales': 45.0}, {'sales': 35.0}] |
create table i_hate_people_who_answer_questions(
names Array(Array(String)),
data Array(Array(Map(String, Float64)))
)
Engine=Memory;
insert into i_hate_people_who_answer_questions
values( [['James', 'Scott'], ['James', 'Scott']], [[map('sales', 20.0), map('sales', 20.0)], [map('sales', 25.0), map('sales', 15.0)]] ) ;
我试过 sumMap(names, data)
但这不起作用,因为 data
是另一个映射并且此函数需要原始数据类型,给出以下错误:"Illegal type Map(String, Decimal(38, 2)) of argument for aggregate function sum."
如有任何帮助,我们将不胜感激。
SELECT
__names,
sumMap(__data)
FROM
(
SELECT
__names,
__data
FROM
(
SELECT
_names,
_data
FROM i_hate_people_who_answer_questions
ARRAY JOIN
names AS _names,
data AS _data
)
ARRAY JOIN
_names AS __names,
_data AS __data
)
GROUP BY __names
┌─__names─┬─sumMap(__data)─┐
│ James │ {'sales':45} │
│ Scott │ {'sales':35} │
└─────────┴────────────────┘
SELECT
groupArray(__names),
groupArray(___data)
FROM
(
SELECT
__names,
sumMap(__data) AS ___data
FROM
(
SELECT
__names,
__data
FROM
(
SELECT
_names,
_data
FROM i_hate_people_who_answer_questions
ARRAY JOIN
names AS _names,
data AS _data
)
ARRAY JOIN
_names AS __names,
_data AS __data
)
GROUP BY __names
)
┌─groupArray(__names)─┬─groupArray(___data)─────────┐
│ ['James','Scott'] │ [{'sales':45},{'sales':35}] │
└─────────────────────┴─────────────────────────────┘