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

PostgreSQL使用GROUP BY子句构建jsonb数组的实现问题

实现方案(PostgreSQL 环境)

你提到的json_agg就是核心聚合函数,只要按规则分组、拼接字段前缀即可,参考写法如下:

场景1:原始数据每行的formulario为单个JSON对象(常规场景)

SELECT
  evaluation_id,
  CONCAT('Método: ', nombre) AS nombre,
  json_agg(formulario) AS formulario
FROM
  -- 这里替换成你现在的原始查询子查询
  (SELECT evaluation_id, nombre, formulario FROM 你的业务表 WHERE 过滤条件) AS raw_data
GROUP BY
  evaluation_id, nombre
ORDER BY
  evaluation_id;

场景2:原始数据每行的formulario已经是单元素JSON数组

如果你的原始结果里每行formulario本身就是[{...}]格式的数组,需要先拆包再聚合:

SELECT
  evaluation_id,
  CONCAT('Método: ', nombre) AS nombre,
  json_agg(form_item) AS formulario
FROM
  (SELECT evaluation_id, nombre, formulario FROM 你的业务表 WHERE 过滤条件) AS raw_data,
  json_array_elements(raw_data.formulario) AS form_item
GROUP BY
  evaluation_id, nombre
ORDER BY
  evaluation_id;

注意事项

  • 分组时需要同时带上evaluation_id和原始nombre字段,避免同ID不同名称的异常数据被错误合并
  • 如果需要输出JSON格式的字符串而非JSON类型,可以在外层再套一层jsonb_build_object或者array_to_json做转换

内容的提问来源于stack exchange,提问作者Jose R. Chacón

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:54:10