PostgreSQL group by 后查询出其他字段
PostgreSQL About 677 words需求
使用聚合函数后,无法select其他字段。
场景
有班级表(id/name)和学生表(id/name/class_id),学生表中有class_id字段关联班级表。
需查询出每个班级学生数量及班级名称。
说明
如果聚合后需要查询出的非聚合字段的值相同,则可以使用min(),max()等聚合函数,任意取一值即可。
如果聚合后需要查询出的非聚合字段的值不同,则可以使用string_agg()函数凭借。
SQL
值相同
select s.class_id, min(c.name), count(s.id) from student s
left join class c on s.class_id = c.id
group by s.class_id
值不同
所有值拼接在一起,以,隔开。(包含重复值)
select s.class_id, string_agg(c.name, ','), count(s.id) from student s
left join class c on s.class_id = c.id
group by s.class_id
去除重复值拼接在一起,以,隔开。使用string_agg(distinct column, ',')
select s.class_id, string_agg(distinct c.name, ','), count(s.id) from student s
left join class c on s.class_id = c.id
group by s.class_id
Views: 1,541 · Posted: 2024-06-06
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...