如何在postgres中将多个值作为单个字符串收集?

Dau*_*aud 5 sql postgresql postgresql-9.1

我有桌子:

Project table

id name
-------
1  A
2  B

Assignment table

id name project_id
-------------------
1  A1   1
2  A2   1
3  A3   2
Run Code Online (Sandbox Code Playgroud)

我希望编写一个返回每个项目的查询,其中包含从中创建的赋值的名称,如:

project_id  assignments
-----------------------
1            A1,A2
2            A3
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这一目标?

Joh*_*Woo 12

您可以连接表并使用array_agg它们组合以逗号分隔的值

SELECT a.id, array_agg(b.name) assignments
FROM    Project a
        INNER JOIN assignment b
          ON a.id = b.project_ID
GROUP BY a.id
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示

或者通过使用 STRING_AGG

SELECT a.id, STRING_AGG(b.name, ', ' ORDER BY b.name) assignments
FROM    Project a
        INNER JOIN assignment b
          ON a.id = b.project_ID
GROUP BY a.id
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示