687
技術社區[雲棲]
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