- 此问题在此处已有答案**:
How to concatenate strings of a string field in a PostgreSQL 'group by' query?(14个答案)
九年前就关门了。
我有一张这样的table
| 电影|演员|
| - ------|- ------|
| A类|1个|
| A类|第二章|
| A类|三个|
| 乙|四个|
我想得到一部电影的名字和电影中的所有演员,我想得到的结果是这样的格式:
| 电影|演员列表|
| - ------|- ------|
| A类|一、二、三|
我该怎么做呢?
2条答案
按热度按时间1u4esq0p1#
使用聚合函数
string_agg()
时更简单(Postgres 9.0或更高版本):GROUP BY 1
中的1
是位置参考,在本例中是GROUP BY movie
的快捷方式。string_agg()
需要数据类型text
作为输入。其他类型需要显式转换(actor::text
)- * 除非 * 定义了到text
的隐式转换-所有其他字符串类型(varchar
、character
、name
...)和某些其他类型都是这种情况。正如isapir所评论的,如果需要的话,可以在聚合调用中添加一个
ORDER BY
子句来获得一个排序列表,比如:但在子查询中对行进行排序通常更快。请参阅:
jdzmm42g2#
您可以使用
array_agg
函数:结果:
| 电影|演员|
| - ------|- ------|
| A类|一、二、三|
| 乙|四个|
查看此SQLFiddle
更多信息请参见9.18. Aggregate Functions