转自https://blog.csdn.net/qq_41934680/article/details/120816081
在开发过程中,会遇到分组后取每一组排名前几的信息,具体实现的sql如下:
SELECT
a.id,
a.NAME '姓名',
a.achievement '成绩',
a.category '类别'
FROM
`user` a;
按category
分组,查出achievement
最高的每组的前三名
SELECT
a.id,
a.NAME '姓名',
a.achievement '成绩',
a.category '类别'
FROM
`user` a
WHERE
3 > (
SELECT COUNT(*) FROM `user` b
WHERE b.category = a.category
AND b.achievement > a.achievement
)
ORDER BY
a.category,
a.achievement DESC
3 >
目的是获取前三条数据 where b.category = a.category
目的是确定分组字段 b.achievement > a.achievement
排序字段