如何使用STRING_AGG从三个关联表获取逗号分隔的球员姓名
问题:按球队分组获取逗号分隔的球员姓名列表
表结构
- Teams:Id
- Players:Id、Name
- TeamsPlayers:Id、TeamId、PlayerId
期望结果
| TeamId | PlayerNames |
|---|---|
| 1 | Ronaldo,Rivaldo,Ronaldinho,Dida |
| 2 | Riquelme,Messi,Aguero,DiMaria |
尝试的SQL语句
SELECT STRING_AGG(Name, ',') FROM ( SELECT tp.TeamId, p.Name FROM Players p JOIN TeamPlayers tp ON p.Id = tp.PlayerId GROUP BY tp.TeamId, p.Name )
正确实现方法
你的SQL存在两个问题:
- 子查询中按
tp.TeamId, p.Name分组属于多余操作,这会让每个球员单独成为一组,失去按球队聚合的意义; - 主查询未按
TeamId分组,最终只会返回所有球员姓名拼接成的单个字符串,无法按球队区分结果。
正确的SQL语句如下:
SELECT tp.TeamId, STRING_AGG(p.Name, ',') AS PlayerNames FROM Players p JOIN TeamPlayers tp ON p.Id = tp.PlayerId GROUP BY tp.TeamId
直接关联Players和TeamsPlayers表后,按TeamId分组,对每组内的球员姓名使用STRING_AGG函数进行逗号分隔的拼接,即可得到按球队分组的球员姓名列表。
内容的提问来源于stack exchange,提问作者Sebastián Rubina
相关产品推荐
相关产品推荐

