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

PrestoDB中按ID分组将多行转为键值对JSON数组的SQL实现问题

PrestoDB按ID分组聚合成JSON数组方案

核心实现逻辑

你对array_agg的认知存在偏差:Presto的array_agg函数支持聚合包括JSON在内的任意可哈希类型,无需额外转换,直接对你已经生成的单行JSON对象做分组聚合即可。

最优实现代码(推荐)

使用Presto内置的json_object函数构造单行JSON对象,写法更简洁易读,执行效率也更高:

SELECT
  id,
  array_agg(
    json_object(
      'col1': col1,
      'col2': col2,
      'col3': col3
    )
  ) AS value
FROM your_table
GROUP BY id

如果你习惯用原逻辑的MAP转JSON写法,也可以直接聚合:

SELECT
  id,
  array_agg(
    CAST(MAP(ARRAY['col1','col2','col3'], ARRAY[k.col1, k.col2, k.col3]) AS JSON)
  ) AS value
FROM your_table k
GROUP BY id

低版本兼容实现方案

如果你的Presto版本较低,不支持直接聚合JSON类型,可以先将单行JSON转字符串,聚合后再拼接转换为JSON数组:

SELECT
  id,
  CAST(
    CONCAT('[', array_join(array_agg(CAST(
      MAP(ARRAY['col1','col2','col3'], ARRAY[k.col1, k.col2, k.col3])
      AS JSON
    )::VARCHAR), ','), ']')
    AS JSON
  ) AS value
FROM your_table k
GROUP BY id

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 23:54:06