将一列中的多个结果行连接成一列,按另一列分组

我有这样的桌子

Movie Actor A 1 A 2 A 3 B 4 

我想获得电影的名称和该电影中的所有演员的名字,我希望结果是这样的格式:

 Movie ActorList A 1, 2, 3 

我该怎么做?

集合函数string_agg() (Postgres 9.0或更高版本)更简单:

 SELECT movie, string_agg(actor, ', ') AS actor_list FROM tbl GROUP BY 1; 

GROUP BY 1是这种情况下的位置引用和GROUP BY movie的快捷方式。

string_agg()需要数据typestext作为input。 其他types需要显式转换( actor::text ) – 除非定义了隐式转换为text – 对于所有其他字符types( varcharcharacter"char" )和其他types,情况如此。

你可以使用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

更多请参见9.18。 聚合函数

  select movie,GROUP_CONCAT(DISTINCT Actor) as ActorList from toyr_table group by movie 

你可以在这里阅读它http://www.w3resource.com/mysql/aggregate-functions-and-grouping/aggregate-functions-and-grouping-group_concat.php