我正在使用Postgres 9.4,我有如下查询:
SELECT pid, code, name FROM activity, (
SELECT code FROM project
) projects WHERE activity.pcode = projects.code;
返回以下关系:
pid | code | name
-------------------------------
1 | p1 | activity1
1 | p3 | activity2
2 | p1 | activity3
2 | p2 | activity4
2 | p3 | activity5
我正在尝试编写相同的查询,但希望获得与每个"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'}]
有什么想法吗? 非常感谢您的帮助。
更新
这是我所做的(接近于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;