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: 314 · Posted: 2024-06-06

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb/LiteNote

扫描下方二维码关注公众号和小程序↓↓↓

扫描下方二维码关注公众号和小程序↓↓↓
Today On History
Browsing Refresh