美文网首页MySQL
(LeetCode:数据库)分数排名

(LeetCode:数据库)分数排名

作者: lconcise | 来源:发表于2018-08-05 17:31 被阅读0次

    编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(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    |
    +-------+------+
    

    Solution:
    此题的思路是对于每一个分数,找出表中有多少个大于、等于该分数的不同的分数,然后按降序排列即可。

    SELECT
        score,
        (
            SELECT
                COUNT(DISTINCT score)
            FROM
                score
            WHERE
                score >= a.score
        ) AS rank
    FROM
        score a
    ORDER BY
        score DESC;
    

    相关文章

      网友评论

        本文标题:(LeetCode:数据库)分数排名

        本文链接:https://www.haomeiwen.com/subject/qebbvftx.html