在开发过程中,会遇到分组后取每一组排名前几的信息,具体实现的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
sql解析:
3>:目的是获取前三条数据。
where b.category=a.category :目的是确定分组字段
b.achievement > a.achievement 排序字段
特别说明: 如果这里的 3> 返回的结果条数不对, 这是因为 where 条件里面的子查询不正确导致的, 有可能需要再加多几个条件去作关联,