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

排序后的結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM