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


8

标题含糊不清,我很抱歉,但是我根本不知道用正确的词来形容。

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

SELECT row_to_json(t) FROM ( SELECT type, properties, geometry FROM "bgbCargoMinardJSON" ) t

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

"961":[ {"type":"Feature",.... {"type":"Feature",.... {"type":"Feature",.... ], "962":[ ..... ]

所以在过去的大约1 1/2个小时里,我一直在为此苦苦挣扎。我真的不知道该怎么做。这就是我现在所拥有的:

SELECT array_agg(row_to_json(t)) FROM ( SELECT type, properties, geometry FROM "bgbCargoMinardJSON" ) t) FROM "bgbCargoMinardJSON" GROUP BY "carProductId"

Answers:


9

如果您使用的是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;

谢谢杰克!编队明智了!我唯一遇到的问题是它不提供有效的json(从技术上讲,它确实提供了)。正在进行文本到json的转换,例如:{"3565": "[{\"type\":我在每个括号前都有一个撇号,在每个撇号之前都有一个斜杠。我以前有过这个,它总是与数据类型有关。不管怎么说,我并没有完全理解您编写的查询的工作原理,因此我真的不知道该在哪里以及如何解决此问题。
ervazu 2015年

这可能不是最佳解决方案,但我只是使用了替换功能来解决此问题。再次感谢您的宝贵时间!
ervazu 2015年

1
这适用于我的情况:json_agg(to_json(items.*)) as "items"
ricka
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.