PostgreSQL两表关联查询:聚合用户技能为逗号分隔格式
这题我太熟了!PostgreSQL里刚好有专门的字符串聚合函数能完美解决这个需求,直接用STRING_AGG就能把同一用户的技能合并成逗号分隔的字符串,一步到位。
完整查询SQL
SELECT u.fullname, u.email, STRING_AGG(s.skills, ',') AS skills FROM "USER" u INNER JOIN SKILLS s ON u.id = s.user_id GROUP BY u.id, u.fullname, u.email;
代码解释
- 表关联:用
INNER JOIN把USER表和SKILLS表通过用户ID关联起来,确保每个技能都能对应到所属的用户; - 分组聚合:通过
GROUP BY按用户的唯一标识(id、fullname、email)分组,这样每个用户只会生成一行结果; - 字符串合并:
STRING_AGG(s.skills, ',')是核心函数,它会把每个分组里的所有skills值用逗号连接成一个字符串,正好符合你要的格式。
可选优化:给技能排序
如果希望合并后的技能按字母顺序排列,可以给STRING_AGG加上排序参数:
STRING_AGG(s.skills, ',' ORDER BY s.skills) AS skills
查询结果示例
| fullname | skills | |
|---|---|---|
| abc | a@a.com | writer,blogger |
| def | b@b.com | singer |
内容的提问来源于stack exchange,提问作者abcd gef




