我有一个简单的查询,SELECT name, grp FROM things;
结果如下表所示:
name | grp
------+-----
a | y
b | x
c | x
d | z
e | z
f | z
我想以以下单个JSON对象结束:
{y: [a], x: [b,c], z: [d,e,f]}
我觉得我与查询更接近了,该查询SELECT grp, array_agg(name) as names FROM things GROUP BY grp;
提供了三行,其中“名称”被压缩到一个数组中,但是我不知道从哪里可以将这些行压缩到一个JSON对象中。
SELECT json_build_object(grp, array_agg(name)) as objects FROM things GROUP BY grp;
可能稍微接近一点,因为这会导致单个JSON对象(如)的单列结果{y: [a]}
,但它们仍然是单个对象,因此可能不是正确的选择。
这是使用Postgresql 9.4。
看来这里的关键是json_object_agg函数,该函数未与其他json函数一起列出。
请参阅:http : //www.postgresql.org/docs/9.4/static/functions-aggregate.html
以下查询可让我确切地找到所需内容:
SELECT json_object_agg(each.grp, each.names) FROM (
SELECT grp, array_agg(name) as names FROM things GROUP BY grp
) AS each;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句