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
排序后的结果: