Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Clickhouse:基于另一个数组的数组总数_Arrays_Clickhouse - Fatal编程技术网

Arrays Clickhouse:基于另一个数组的数组总数

Arrays Clickhouse:基于另一个数组的数组总数,arrays,clickhouse,Arrays,Clickhouse,假设您有下表: ID COUNTRIES UNITS 1 ['UK', 'Italy', 'France'] [2000, 1000, 1000] 1 ['France', 'Italy', 'UK'] [3000, 4000, 2000] 1 ['Italy'] [2000] 在ClickHouse中是否有方法为国家列中的每个国家添加比率列?类似于按国家分组的总和(单位) 预期结果: ID COU

假设您有下表:

ID  COUNTRIES                   UNITS
1   ['UK', 'Italy', 'France']   [2000, 1000, 1000]
1   ['France', 'Italy', 'UK']   [3000, 4000, 2000]
1   ['Italy']                   [2000]
在ClickHouse中是否有方法为
国家
列中的每个国家添加
比率
列?类似于按国家分组的总和(单位)

预期结果:

ID  COUNTRIES                   TOTAL_UNITS
1   ['UK', 'Italy', 'France']   [4000, 4000, 7000]
Reprex代码:

SELECT data.1 ID, data.2 COUNTRIES, data.3 UNITS
FROM (
    SELECT arrayJoin([(1, ['UK', 'Italy', 'France'], [2000, 1000, 1000]), 
                    (1, ['France', 'Italy', 'UK'], [3000, 4000, 2000]), 
                    (1, ['Italy'], [2000])]) data);
select sumMap(COUNTRIES, UNITS) from (

SELECT data.1 ID, data.2 COUNTRIES, data.3 UNITS
FROM (
    SELECT arrayJoin([(1, ['UK', 'Italy', 'France'], [2000, 1000, 1000]), 
                    (1, ['France', 'Italy', 'UK'], [3000, 4000, 2000]), 
                    (1, ['Italy'], [2000])]) data)

)

┌─sumMap(COUNTRIES, UNITS)───────────────────┐
│ (['France','Italy','UK'],[4000,7000,4000]) │
└────────────────────────────────────────────┘




select (sumMap(COUNTRIES, UNITS) as x).1 a , x.2  b from (

SELECT data.1 ID, data.2 COUNTRIES, data.3 UNITS
FROM (
    SELECT arrayJoin([(1, ['UK', 'Italy', 'France'], [2000, 1000, 1000]), 
                    (1, ['France', 'Italy', 'UK'], [3000, 4000, 2000]), 
                    (1, ['Italy'], [2000])]) data)

)
┌─a───────────────────────┬─b────────────────┐
│ ['France','Italy','UK'] │ [4000,7000,4000] │
└─────────────────────────┴──────────────────┘




select groupArray(COUNTRY) COUNTRIES, groupArray(s) UNITS from (
select sum(UNIT) s, COUNTRY from (

SELECT data.1 ID, data.2 COUNTRIES, data.3 UNITS
FROM (
    SELECT arrayJoin([(1, ['UK', 'Italy', 'France'], [2000, 1000, 1000]), 
                    (1, ['France', 'Italy', 'UK'], [3000, 4000, 2000]), 
                    (1, ['Italy'], [2000])]) data)
) array join UNITS as UNIT, COUNTRIES as COUNTRY
group by COUNTRY)

┌─COUNTRIES───────────────┬─UNITS────────────┐
│ ['France','Italy','UK'] │ [4000,7000,4000] │
└─────────────────────────┴──────────────────┘