将对象聚合到 json 数组中(子查询问题)

erv*_*azu 8 postgresql aggregate json

我很抱歉这个模糊的标题,但我根本不知道用什么合适的词来描述这个。

我有这个查询将一堆列转换为一个可以正常工作的对象:

SELECT row_to_json(t)
FROM (
  SELECT type, properties, geometry FROM "bgbCargoMinardJSON"
) t
Run Code Online (Sandbox Code Playgroud)

但是,我想将属于某个类别的对象分组到一个数组中。该类别由我的表中名为“cargoProductId”的第四列定义。该数组应将“cargoProductId”的值作为键。所以:

SELECT row_to_json(t)
FROM (
  SELECT type, properties, geometry FROM "bgbCargoMinardJSON"
) t
Run Code Online (Sandbox Code Playgroud)

所以我在过去的 1 1/2 小时左右一直在努力解决这个问题。我真的不知道如何做到这一点。这就是我现在所拥有的:

SELECT array_agg(row_to_json(t))
FROM (
  SELECT type, properties, geometry FROM "bgbCargoMinardJSON"
) t) FROM "bgbCargoMinardJSON" GROUP BY "carProductId"
Run Code Online (Sandbox Code Playgroud)

Jac*_*las 10

如果您使用的是 9.4,则可能是这样的:

select json_object(array_agg(id)::text[],array_agg(rw)::text[])
from( select id
           , ( select to_json(array_agg(row_to_json(t)))
               from (select typ,prop from bgb where id=b.id) t ) rw
      from bgb b
      group by id ) z;
Run Code Online (Sandbox Code Playgroud)

  • 这适用于我的情况:`json_agg(to_json(items.*)) as "items"` (2认同)