zoukankan      html  css  js  c++  java
  • 178. 分数排名

    题目描述

    编写一个 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    |
    +-------+------+
    

    重要提示: 对于 MySQL 解决方案,如果要转义用作列名的保留字,可以在关键字之前和之后使用撇号。例如 `Rank`

    题解

    # Write your MySQL query statement below
    SELECT 
      Score,
      DENSE_RANK() OVER(ORDER BY Score DESC) AS `Rank`
    FROM
      Scores;
    

    DENSE_RANKRANKROW_NUMBER 的使用说明

    Function Description
    DENSE_RANK 并列连续排名
    RANK 并列跳跃排名
    ROW_NUMBER 连续排名

    eg.

    --------------------------------------------------------
    -- table_name: Scores
    --
    -- +----+-------+
    -- | id | score |
    -- +----+-------+
    -- | 1  | 78    | 
    -- | 2  | 89    |
    -- | 3  | 86    |
    -- | 4  | 91    |
    -- | 5  | 78    |
    -- | 6  | 89    |
    -- | 7  | 89    |
    -- +----+-------+
    --------------------------------------------------------
    
    --------------------------------------------------------
    SELECT 
      id,
      score,
      DENSE_RANK() OVER(ORDER BY score DESC) AS `DENSE_RANK`,
      RANK() OVER(ORDER BY score DESC) AS `RANK`,
      ROW_NUMBER() OVER(ORDER BY score DESC) AS `ROW_NUMBER`
    FROM
      Scores;
    --------------------------------------------------------
    
    --------------------------------------------------------
    -- result:
    -- 
    -- +----+-------+------------+------+------------+
    -- | id | score | DENSE_RANK | RANK | ROW_NUMBER |
    -- +----+-------+------------+------+------------+
    -- | 4  | 91    | 1          | 1    | 1          |
    -- | 2  | 89    | 2          | 2    | 2          |
    -- | 6  | 89    | 2          | 2    | 3          |
    -- | 7  | 89    | 2          | 2    | 4          |
    -- | 3  | 86    | 3          | 5    | 5          |
    -- | 1  | 78    | 4          | 6    | 6          |
    -- | 5  | 78    | 4          | 6    | 7          |
    -- +----+-------+------------+------+------------+
    --------------------------------------------------------
    
  • 相关阅读:
    Java锁到底锁的到底是哪个对象?什么是锁对象
    什么是正向代理,什么是反向代理
    到底什么是线程安全
    为什么要使用接口,直接写是实现类不行吗
    Nginx配置学习(一)
    Zookeeper集群节点数量为什么要是奇数个?
    Redis 5 单实例数据迁移到Cluster
    Centos8安装Nginx1.18.0
    vmware workstation15 桥接模式互ping不通,虚机可以连通局域网其他机器解决方法
    MongoDB double类型保留2位小数
  • 原文地址:https://www.cnblogs.com/Super-Lee/p/13391860.html
Copyright © 2011-2022 走看看