上述的這題,如果不使用本次使用的函數的答案如下,也就是說,如果你的MySQL無法使用本篇中的函數,可以透過下面的語法邏輯做替換。
SELECT t1.Score as Score, ( SELECT COUNT(DISTINCT t2.Score) FROM Scores t2 WHERE t2.Score >= t1.Score ) AS `Rank` FROM Scores t1 ORDER BY t1.Score DESC
作用:找出指定條件後的進行排名,條件相同排名相同,排名間斷不連續。
這個函數可用於學生排名,其中成績相同的兩個學生會被並列,下一名學生將騰出其應有的名次。即:1 1 3 4 5 5 7
SELECT id, name, score, rank() over(ORDER BY score DESC) AS 'rank' FROM student
#作用:找出指定條件後的進行排名,條件相同排名相同,排名間斷不連續。
說明:和rank() over 的作用相同,差別在於dense_rank() over 排名是密集連續的。使用此函數來確定學生的排名。當出現成績相同的情況時,兩名學生將並列該排名,排名的下一位將根據接下來的名次進行決定。即:1 1 2 3 4 5 5 6
SELECT id, name, score, dense_rank() over(ORDER BY score DESC) AS 'rank' FROM student
#作用:查出指定條件後的進行排名,條件相同排名也不相同,排名間斷不連續。
即使查詢出的數值相同,這個函數會進行連續排序,不需要考慮是否並列。即:1 2 3 4 5 6
SELECT id, name, score, row_number() over(ORDER BY score DESC) AS 'rank' FROM student
函數中的業務邏輯可以是複雜的,不受限於ORDER BY,也可以加上PARTITION BY。
### 分班级排名 SELECT id, name, score, class, row_number() over(PARTITION BY class ORDER BY score DESC) AS 'rank' FROM student
以上是MySQL中rank() over、dense_rank() over和row_number() over怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!