我有一个简单的查询,SELECT name, grp FROM things;导致下表:
name | grp
------+-----
a | y
b | x
c | x
d | z
e | z
f | z
Run Code Online (Sandbox Code Playgroud)
我想最终得到以下单个JSON对象:
{y: [a], x: [b,c], z: [d,e,f]}
Run Code Online (Sandbox Code Playgroud)
我觉得我更接近于查询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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5294 次 |
| 最近记录: |