溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2022-03-23 14:05:05 來源:億速云 閱讀:401 作者:iii 欄目:開發技術

今天小編給大家分享一下MySQL中rank() over、dense_rank() over和row_number() over怎么用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

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怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女