如何将查询结果转换为Postgres内的JSON对象

Azd*_*dle 6 postgresql json

我有一个简单的查询,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.

Azd*_*dle 6

这里的关键似乎是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)

  • 为什么总是这样我花了一天半的时间试图找出自己的答案,放弃,发布到SO,给它更多的搜索,并在10分钟内找到答案. (4认同)
  • 这里积累的丰富知识使你的思想受益. (3认同)