首頁  >  文章  >  資料庫  >  MySQL中rank() over、dense_rank() over和row_number() over怎麼用

MySQL中rank() over、dense_rank() over和row_number() over怎麼用

PHPz
PHPz轉載
2023-05-26 19:55:291549瀏覽

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

rank() over(業務邏輯)

作用:找出指定條件後的進行排名,條件相同排名相同,排名間斷不連續。

這個函數可用於學生排名,其中成績相同的兩個學生會被並列,下一名學生將騰出其應有的名次。即:1 1 3 4 5 5 7

SELECT id, name, score, rank() over(ORDER BY score DESC) AS 'rank' FROM student

MySQL中rank() over、dense_rank() over和row_number() over怎麼用

#dense_rank() over(業務邏輯)

#作用:找出指定條件後的進行排名,條件相同排名相同,排名間斷不連續。

說明:和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

MySQL中rank() over、dense_rank() over和row_number() over怎麼用

row_number() over(業務邏輯)

#作用:查出指定條件後的進行排名,條件相同排名也不相同,排名間斷不連續。

即使查詢出的數值相同,這個函數會進行連續排序,不需要考慮是否並列。即:1 2 3 4 5 6

SELECT id, name, score, row_number() over(ORDER BY score DESC) AS 'rank' FROM student

MySQL中rank() over、dense_rank() over和row_number() over怎麼用

#後記

函數中的業務邏輯可以是複雜的,不受限於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怎麼用

以上是MySQL中rank() over、dense_rank() over和row_number() over怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除