可用于排序、排名的窗口函数有:
本题应该用DENSE_RANK
获取无缺口排名。
SELECT score,dense_rank() OVER(ORDER BY score DESC) as `rank`
FROM Scores
学习了窗口函数后,排名问题直接用函数解决是最直观的。
在MySQL老版本还不支持窗口函数的背景下,我们也可以考虑用多个表,第二张表用于count计数。
SELECT
a.score ,
(SELECT COUNT(DISTINCT b.score) FROM Scores b WHERE b.score>=a.score) as `rank`
FROM Scores a
ORDER BY a.score DESC;