将一列的多个结果行合并为一个,并按另一列分组

我有这样的桌子


Movie   Actor   

  A       1

  A       2

  A       3

  B       4

我想获取电影的名称以及该电影中的所有演员,并且我希望结果的格式如下:


Movie   ActorList

 A       1, 2, 3

我该怎么做?

将一列的多个结果行合并为一个,并按另一列分组

天涯尽头无女友
浏览 779回答 3
3回答

慕田峪9158850

使用聚合函数string_agg()(Postgres 9.0或更高版本)更简单:SELECT movie, string_agg(actor, ', ') AS actor_listFROM   tblGROUP  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_listFROM   tblGROUP  BY 1;

慕码人2483693

您可以使用array_agg函数:SELECT "Movie",array_to_string(array_agg(distinct "Actor"),',') AS ActorFROM Table1GROUP BY "Movie";结果:| MOVIE | ACTOR |-----------------|     A | 1,2,3 ||     B |     4 |看到这个SQLFiddle
打开App,查看更多内容
随时随地看视频慕课网APP