经过查找,在网上找到了类似的写法。但是经过测试,发现查询结果与期望的情况不相符,经过一系列的测试,终于发现了问题所在。
以下是经过测试过的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处,第一个排序字段必须是想要进行分类的字段,这样可以保证在查询时,能够把所有的分类字段做成连续的区间,然后再对想要排序的字段进行排序