这篇文章主要介绍了MYSQL如何实现排名及查询指定用户排名功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

表结构:

CREATETABLEtest.testsort(idint(11)NOTNULLAUTO_INCREMENT,uidint(11)DEFAULT0COMMENT'用户id',scoredecimal(10,2)DEFAULT0.00COMMENT'分数',PRIMARYKEY(id))ENGINE=INNODBAUTO_INCREMENT=1CHARACTERSETutf8COLLATEutf8_general_ciCOMMENT='测试排序'ROW_FORMAT=DYNAMIC;

思路:可以先排序,再对结果进行编号;也可以先查询结果,再排序编号。

说明:

@rownum := @rownum + 1 中 := 是赋值的作用,这句话的意思是先执行@rownum + 1,然后把值赋给@rownum;

(SELECT @rownum := 0) r 这句话的意思是设置rownum字段的初始值为0,即编号从1开始。

实现排名:

方法一:

SELECTt.*,@rownum:=@rownum+1ASrownumFROM(SELECT@rownum:=0)r,(SELECT*FROMtestsortORDERBYscoreDESC)ASt;

方法二:

SELECTt.*,@rownum:=@rownum+1ASrownumFROM(SELECT@rownum:=0)r,testsortAStORDERBYt.scoreDESC;

结果:

查看指定用户排名:

方法一:

SELECTb.*FROM(SELECTt.*,@rownum:=@rownum+1ASrownumFROM(SELECT@rownum:=0)r,(SELECT*FROMtestsortORDERBYscoreDESC)ASt)ASbWHEREb.uid=222;

方法二:

SELECTb.*from(SELECTt.*,@rownum:=@rownum+1ASrownumFROM(SELECT@rownum:=0)r,testsortAStORDERBYt.scoreDESC)asbwhereb.uid=222;

结果:

实现并列排名(相同分数排名相同):

SELECTobj.uid,obj.score,CASEWHEN@rowtotal=obj.scoreTHEN@rownumWHEN@rowtotal:=obj.scoreTHEN@rownum:=@rownum+1WHEN@rowtotal=0THEN@rownum:=@rownum+1ENDASrownumFROM(SELECTuid,scoreFROMtestsortORDERBYscoreDESC)ASobj,(SELECT@rownum:=0,@rowtotal:=NULL)r

查询指定用户并列排名:

SELECTtotal.*FROM(SELECTobj.uid,obj.score,CASEWHEN@rowtotal=obj.scoreTHEN@rownumWHEN@rowtotal:=obj.scoreTHEN@rownum:=@rownum+1WHEN@rowtotal=0THEN@rownum:=@rownum+1ENDASrownumFROM(SELECTuid,scoreFROMtestsortORDERBYscoreDESC)ASobj,(SELECT@rownum:=0,@rowtotal:=NULL)r)AStotalWHEREtotal.uid=222;

感谢你能够认真阅读完这篇文章,希望小编分享的“MYSQL如何实现排名及查询指定用户排名功能”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!