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: 683 · Posted: 2024-06-06
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...