轉載自思心思危http://www.cnblogs.com/zengguowang/p/5541431.html
?
一、sql1{不管數據相同與否,排名依次排序(1,2,3,4,5,6,7.....)}
SELECTobj.user_id,
obj.score,
@rownum := @rownum + 1 AS rownum FROM(SELECTuser_id,scoreFROM`sql_rank`ORDER BYscore DESC) AS obj,(SELECT @rownum := 0) r
二、sql2{只要數據有相同的排名就一樣,排名依次排序(1,2,2,3,3,4,5.....)}
SELECTobj.user_id,obj.score, CASE WHEN @rowtotal = obj.score THEN @rownum WHEN @rowtotal := obj.score THEN @rownum :=@rownum + 1 WHEN @rowtotal = 0 THEN @rownum :=@rownum + 1 END AS rownum FROM(SELECTuser_id,scoreFROM`sql_rank`ORDER BYscore DESC) AS obj,(SELECT @rownum := 0 ,@rowtotal := NULL) r
三、sql2{只要數據有相同的排名就一樣,但是相同排名也占位,排名依次排序(1,2,2,4,5,5,7.....)}
此時需呀再增加一個變量,來記錄排序的號碼(自增)
SELECTobj_new.user_id,obj_new.score,obj_new.rownum FROM(SELECTobj.user_id,obj.score,@rownum := @rownum + 1 AS num_tmp,@incrnum := CASEWHEN @rowtotal = obj.score THEN@incrnumWHEN @rowtotal := obj.score THEN@rownumEND AS rownumFROM(SELECTuser_id,scoreFROM`sql_rank`ORDER BYscore DESC) AS obj,(SELECT@rownum := 0 ,@rowtotal := NULL ,@incrnum := 0) r) AS obj_new