如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。
    +——+———-+
    | Id | Score |
    +——+———-+
    | 1 | 3.50 |
    | 2 | 3.65 |
    | 3 | 4.00 |
    | 4 | 3.85 |
    | 5 | 4.00 |
    | 6 | 3.65 |
    +——+———-+
    例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):

    +———-+———+
    | Score | Rank |
    +———-+———+
    | 4.00 | 1 |
    | 4.00 | 1 |
    | 3.85 | 2 |
    | 3.65 | 3 |
    | 3.65 | 3 |
    | 3.50 | 4 |
    +———-+———+

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/rank-scores
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    方法一:直接利用 dense_rank() 函数 select score,dense_rank() over (order by score desc) from scores
    方法二:①先按score进行排序
    ②提取出大于等于X的所有分数集合H,将H去重后的元素个数就是X的排名。比如你考了99分,但最高的就只有99分,那么去重之后集合H里就只有99一个元素,个数为1,因此你的Rank为1
    select b.Score from Scores b where b.Score >= X;
    ③ 对②中的集合进行去重,并计算数量
    select count(distinct(b.Score)) from Scores b where b.Score >= X
    ④最终结果
    select a.Score as Score,(select count(distinct b.Score) from Scores b where b.Score >= a.Score) as Rank
    from Scores a order by a.Score DESC