经过查找,在网上找到了类似的写法。但是经过测试,发现查询结果与期望的情况不相符,经过一系列的测试,终于发现了问题所在。
以下是经过测试过的sql
select id,class,score,rank from (
select b.id,b.class,b.score,
if(@pdept=b.class,@rank:=@rank+1,@rank:=1) as rank,
@pdept:=b.class
from (
select id,class,score from a order by id ,score
) b ,(select @pdept := null ,@rank:=0) c ) result
having rank <6 ;
在order by处,第一个排序字段必须是想要进行分类的字段,这样可以保证在查询时,能够把所有的分类字段做成连续的区间,然后再对想要排序的字段进行排序