为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

天涯尽头无女友 2019-12-16 09:57:29
我有这样的桌子Movie   Actor     A       1  A       2  A       3  B       4我想获取电影的名称以及该电影中的所有演员,并且我希望结果的格式如下:Movie   ActorList A       1, 2, 3我该怎么做?将一列的多个结果行合并为一个,并按另一列分组
查看完整描述

3 回答

?
慕田峪9158850

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;


查看完整回答
反对 回复 2019-12-16
?
慕码人2483693

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



查看完整回答
反对 回复 2019-12-16
  • 3 回答
  • 0 关注
  • 771 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信