mysql 经典问题_mysql经典排名问题
問題:編寫一個 SQL 查詢來實現評分排名。如果兩個分數相同,則兩個分數排名(Rank)相同。
評分表ratings
方法一:不運用dense_rank(),運用子查詢
解決這一問題可以分為兩個步驟:
步驟一:降序排列分數
select?a.Rating as Rating from?ratings a?order?by?a.Rating DESC;
步驟二:每個評分對應的排名
思路:可以先提取出大于等于X的所有分數集合H,將H去重后的元素個數就是X的排名。
先提取集合H:
select b.Rating from ratings b where b.Rating>= X;
再求出集合H去重之后的元素個數:
select count(distinct b.Score) from Scores b where b.Score >= X as Rank;
最終將兩個步驟結合:
select?a.Rating as Rating,
(select?count(distinct?b.Rating)?from?ratings b?where?b.Rating >=?a.Rating) AS "Rank"
from?ratings a?order?by?a.Rating DESC;
方法二:運用dense_rank()
select Rating, dense_rank() over (order by Rating desc) as "Rank" from ratings;
附:mysql中Rank()和dense_rank()的區別
不同點:RANK()是跳躍排序,即如果有兩條記錄重復,接下來是第三級別
如:1 2 2 4,會跳過3
DENSE_RANK()是連續排序,即如果有兩條記錄重復,接下來是第二級別
如:1 2 2 3
總結
以上是生活随笔為你收集整理的mysql 经典问题_mysql经典排名问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql5.7 server id_三
- 下一篇: mysql 5.7参数目录_mysql5