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