题目:
解法1:使用dense_rank()函数,DENSE_RANK()是连续排序,即如果有两条记录重复,接下来是第二级别,比如:1 2 2 3。
扩展:相比下,还有rank()函数,RANK()是跳跃排序,即如果有两条记录重复,接下来是第三级别,比如:1 2 2 4。 还有一个row_number()函数,这个比较简单,无论什么,直接按数字排下来。
select Score,dense_rank() over(order by Score desc) as 'Rank'
from Scores;
解法2:用b表的每一个Score去跟a表的Score比较,计算每次比较b.Score大于等于a.Score的个数,最后根据Score倒序。
select a.Score,
(select count(distinct(b.Score)) from Scores b where b.Score>=a.Score) as 'Rank'
from Scores a
order by Score DESC;
▲解法1比解法2效率快很多,推荐使用解法1。