MySQL中rank函数如何实现
MySQL中不存在类似于SQL Server或Orcal中的rank()函数来得到排名。而在实际的工作中,常常需要将查询后排序得到的排名给记录下来。由于项目需要,不仅要对成绩进行排名,而且需要相同成绩的具有相同的排名。根据网上的提供的排名方法,进一步进行扩充,得到了下面的实现方式。
表:score,有三个字段,id,name,score
表中原始数据:
SQL代码:
select tmp.id,tmp.name,tmp.score, -- 顺序一直在变大 @j:=@j+1 as j, -- 只有在前后二次排序值不同时才会使用顺序号 @k:=(case when @pre_score=tmp.score then @k else @j end) as rank, @pre_score:=tmp.score as pre_score from ( -- 成绩排序 select * from score order by score desc ) tmp, -- @k 表示最终的排名(相同值时序号相同) -- @j 表示顺序排名 -- @pre_score上一次排序值 (select @k :=0,@j:=0, @pre_score:=0) sdcore
排序后的结果: