clickhouse - 如何按不同的值将 clickhouse 中的 (value,count) 数组分组?
问题描述
例如,我有一个表 A
create table A (
id Int64,
discrete1 String
discrete2 String
) engine=Log;
和一些数据
insert into A values
(1,'A','a')
(1,'B','b')
(1,'A','c')
(2,'C','a')
(1,'A','a');
我怎样才能选择这个结果,元组是(值,计数)
1,[(A,3),(B,1)],[(a,2),(b,1),(c,1)]
2,[(C,1)],[(a,1)]
我的表可能有许多离散值列,有没有办法在一次选择中做到这一点,而无需逐个按离散值列分组。
解决方案
SELECT
id,
arrayMap((x, y) -> (x, y),
(arrayReduce('sumMap', [(groupArrayArray([discrete1]) as arrdiscrete1)],
[arrayResize(CAST([], 'Array(UInt64)'), length(arrdiscrete1), toUInt64(1))]) as sdiscrete1).1,
sdiscrete1.2) rdiscrete1,
arrayMap((x, y) -> (x, y),
(arrayReduce('sumMap', [(groupArrayArray([discrete2]) as arrdiscrete2)],
[arrayResize(CAST([], 'Array(UInt64)'), length(arrdiscrete2), toUInt64(1))]) as sdiscrete2).1,
sdiscrete2.2) rdiscrete2
FROM A
GROUP BY id
┌─id─┬─rdiscrete1────────┬─rdiscrete2────────────────┐
│ 2 │ [('C',1)] │ [('a',1)] │
│ 1 │ [('A',3),('B',1)] │ [('a',2),('b',1),('c',1)] │
└────┴───────────────────┴───────────────────────────┘
推荐阅读
- angular - 如何调用 Angular 8 中表内的表?
- pine-script - 2 在 Renko 图表上带有箭头的 EMA
- javascript - 如何根据不同的键将 JSON 数组重新格式化为另一种格式“分组”
- python - 遇到 python 语法问题,尤其是在 if 检查时
- c# - 有没有更好的方法来使用 [FromUri] 处理默认查询参数?
- python - mypy 类型检查在后面的 `elif` 中间接声明的变量
- php - 将时间范围分成几个小时?
- amazon-web-services - 为什么 AWS 提供商的 OpenShift 安装程序无法连接到 Kubernetes API?
- java - 构建 Apache Ignite 源时出错
- c# - 非授权自定义页面不起作用