You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ClickHouse中按Array(Tuple)元素分组聚合数值的实现问询

ClickHouse数组元组分组聚合解决方案

要实现按records.a分组对records.b求和的需求,核心是先将数组中的元组拆分为独立行,再进行分组聚合,具体实现如下:

方法一:生成键值对Map格式(匹配期望输出)

SELECT
    mapFromArrays(groupArray(a), groupArray(total_b)) AS result
FROM (
    SELECT
        record.a AS a,
        sum(record.b) AS total_b
    FROM meetings
    ARRAY JOIN records AS record
    GROUP BY a
)

执行逻辑:

  1. 展开数组元组:使用ARRAY JOIN records AS record将每个数组中的元组拆分为单独的数据行,此时每条行对应一个(a, b, c)元组的具体值。
  2. 分组求和:按a字段分组,对每组的b值求和,得到每个a对应的总数值。
  3. 转换为Map格式:通过mapFromArrays将分组后的a列表与对应的求和结果列表组合,生成符合期望的键值对结构。

方法二:生成常规分组结果(更直观的列表形式)

如果不需要Map格式,直接获取分组求和的明细结果,可使用以下简化语句:

SELECT
    record.a AS meeting_type,
    sum(record.b) AS total_b
FROM meetings
ARRAY JOIN records AS record
GROUP BY meeting_type

该语句会输出:

meeting_type | total_b
interview    | 14
sync         | 2

验证数据匹配:

针对你插入的测试数据:

[{a: 'interview', b: 3, c: 'x'}, {a: 'sync', b: 2, c: 'y'}],[{a:'interview', b: 11, c: 'l'}]

展开后会得到3条独立行:(interview,3), (sync,2), (interview,11),分组求和后恰好得到interview:14、sync:2的结果。

内容的提问来源于stack exchange,提问作者kobe24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:46:15