閱讀687 返回首頁    go 技術社區[雲棲]


mysql rank 排行

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
複製代碼

排序後的結果:


最後更新:2017-08-18 10:32:28

  上一篇:go  了解下BGP機房
  下一篇:go  外貿仿牌抗投訴主機