3 回答

TA贡献1794条经验 获得超7个赞
使用聚合函数string_agg()(Postgres 9.0或更高版本)更简单:
SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
在这种情况下,1in GROUP BY 1是位置参考和快捷方式GROUP BY movie。
string_agg()期望数据类型text作为输入。其他类型需要显式转换(actor::text) - 除非到隐式转换text的定义-这是所有其他字符类型(的情况下varchar,character,"char"),和一些其他类型。
正如isapir所说,您可以ORDER BY在聚合调用中添加一个子句以获取排序列表-如果需要的话。喜欢:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1;

TA贡献1860条经验 获得超9个赞
您可以使用array_agg函数:
SELECT "Movie",
array_to_string(array_agg(distinct "Actor"),',') AS Actor
FROM Table1
GROUP BY "Movie";
结果:
| MOVIE | ACTOR |
-----------------
| A | 1,2,3 |
| B | 4 |
看到这个SQLFiddle
添加回答
举报