postgresql json聚合

Mik*_*kou 8 sql postgresql json

我正在使用postgres 9.4,我有以下查询:

SELECT pid, code, name FROM activity, (
  SELECT code FROM project
) projects WHERE activity.pcode = projects.code;
Run Code Online (Sandbox Code Playgroud)

返回以下关系:

pid | code |    name    
-------------------------------
  1 | p1   | activity1 
  1 | p3   | activity2
  2 | p1   | activity3
  2 | p2   | activity4
  2 | p3   | activity5
Run Code Online (Sandbox Code Playgroud)

我试图编写相同的查询,但我得到项目代码一个活动名称作为相对于每个"pid"的json数组

所以我正在寻找一个返回如下内容的查询:

pid | json    
------------------------------------------------------------------------------------
  1 | [{'code': 'p1', 'name': 'activity1'}, {'code': 'p3', 'name': 'activity2'}] 
  2 | [{'code': 'p1', 'name': 'activity3'}, {'code': 'p2', 'name': 'activity4'}, {'code': 'p3', 'name': 'activity5'}] 
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?在此先感谢您的帮助

UPDATE

这是我做的(这与Abelisto所说的很接近):

SELECT pid, json_agg(json_build_object('code', code, 'name', name)) AS agg                                                                                                                                    
FROM activity JOIN (                                                                                                                                                                                          
  SELECT code FROM project                                                                                                                                                                                    
) AS p ON p.code=activity.pcode                                                                                                                                                                               
GROUP BY pid;    
Run Code Online (Sandbox Code Playgroud)

Abe*_*sto 10

select
  pid,
  json_agg(json_build_object('code',code,'name',name))
from
  ...
group by
  pid
Run Code Online (Sandbox Code Playgroud)