在MySQL中查詢排名并列的數據可以通過使用變量進行實現。
SELECT t1.id, t1.score, IF(t1.score=@s, @rank:=@rank, @rank:=@i:=@i+1) rank, @s:=t1.score score_rank FROM score t1, (SELECT @s:=0, @rank:=0, @i:=0) t2 ORDER BY t1.score DESC;
以上SQL語句中:
- t1是需要查詢的表,id和score是需要查詢的字段。
- t2是用于初始化變量的虛擬表,@s為排名分數的變量,@rank為排名變量,@i為計數器。
- IF函數用于判斷當前分數是否跟前一條分數相同,如果相同則排名不變,否則排名加1。
- @s:=t1.score用于將查詢的分數保存到@s變量中,以便下一條記錄使用。
- ORDER BY t1.score DESC用于按照分數從高至低排序。
運行以上SQL語句,將會得到類似下面的結果:
+----+-------+------+ | id | score | rank | +----+-------+------+ | 4 | 100| 1| | 5 | 100| 1| | 2 | 90| 3| | 1 | 85| 4| | 6 | 80| 5| | 3 | 75| 6| +----+-------+------+
其中第2條和第3條記錄排名并列第1名,所以它們都是1,而第4條記錄排名為第4名。