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

SQL Presto聚合含字典的列:两种输出需求技术求助

Presto SQL 聚合查询方案

数据表结构与示例数据

user | target | result
-----------------------------
 1   |    b   | {A: 1}
 2   |    a   | {C: 2}
 1   |    c   | {A: 2, B: 3}
 2   |    d   | {A: 1}
 1   |    d   | {C: 4}

输出1:忽略target,按user聚合字典值(key对应数值求和)

需求说明

忽略target字段,按user分组,将result字典中相同key的数值求和,最终聚合成新的字典。

Presto SQL 查询语句

SELECT 
    user,
    map_agg(key, sum_value) AS result
FROM (
    -- 拆分字典为key-value行,按user+key求和
    SELECT 
        user,
        entry.key AS key,
        SUM(entry.value) AS sum_value
    FROM user_data
    CROSS JOIN UNNEST(result) AS entry(key, value)
    GROUP BY user, key
) t
GROUP BY user;

关键函数说明

  • UNNEST(result):将字典类型的result字段拆分为多行,每行对应一个key-value对。
  • SUM(entry.value):对同一user同一key的数值求和。
  • map_agg(key, sum_value):将分组后的key和求和值重新聚合成字典。

输出2:按user聚合,收集每个key对应的target列表

需求说明

按user分组,将result字典中每个key对应的target值收集为数组,最终聚合成新的字典。

Presto SQL 查询语句

SELECT 
    user,
    map_agg(key, target_list) AS result
FROM (
    -- 拆分字典后,按user+key收集target为数组
    SELECT 
        user,
        entry.key AS key,
        ARRAY_AGG(target) AS target_list
    FROM user_data
    CROSS JOIN UNNEST(result) AS entry(key, value)
    GROUP BY user, key
) t
GROUP BY user;

关键函数说明

  • UNNEST(result):拆分字典为key-value行,关联对应的target字段。
  • ARRAY_AGG(target):将同一user同一key对应的所有target值收集为数组。
  • map_agg(key, target_list):将分组后的key和数组重新聚合成字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:25:15