今天小編給大家分享一下MySQL中rank() over、dense_rank() over和row_number() over怎么用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
上述的這道題,如果不使用本次用到的函數的答案如下,也就是說,如果你的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怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。