zoukankan      html  css  js  c++  java
  • leetcode Database3

    一、Rank Scores

    Write a SQL query to rank scores. If there is a tie between two scores, both should have the same ranking. Note that after a tie, the next ranking number should be the next consecutive integer value. In other words, there should be no "holes" between ranks.

    +----+-------+
    | Id | Score |
    +----+-------+
    | 1  | 3.50  |
    | 2  | 3.65  |
    | 3  | 4.00  |
    | 4  | 3.85  |
    | 5  | 4.00  |
    | 6  | 3.65  |
    +----+-------+
    

    For example, given the above Scores table, your query should generate the following report (order by highest score):+-------+------+

    | Score | Rank |
    +-------+------+
    | 4.00  | 1    |
    | 4.00  | 1    |
    | 3.85  | 2    |
    | 3.65  | 3    |
    | 3.65  | 3    |
    | 3.50  | 4    |
    +-------+------+
    分析:题意为 编写SQL对分数进行排序。如果两个分数相等,其排名应相同。注意在排名相等的分数之后,下一个排名的数值应该连续。换言之,排名之间不应该有“洞”(跳跃)。
    思路:使用mysql的自定义变量。
    # Write your MySQL query statement below
    select Score,Rank from 
    (
    SELECT Score,
           CASE
               WHEN @dummy <=> Score THEN @Rank := @Rank 
               ELSE @Rank := @Rank +1
        END AS Rank,@dummy := Score as dummy
    FROM
      (SELECT @Rank := 0,@dummy := NULL) r,
         Scores
    ORDER BY Score DESC
    ) AS C
    

    或者:

    # Write your MySQL query statement below
    SELECT Scores.Score, COUNT(Ranking.Score) AS RANK
      FROM Scores
         , (
           SELECT DISTINCT Score
             FROM Scores
           ) Ranking
     WHERE Scores.Score <= Ranking.Score
     GROUP BY Scores.Id, Scores.Score
     ORDER BY Scores.Score DESC;
    

      

      

     
  • 相关阅读:
    cefsharp wpf 中文输入问题解决方法
    [Node.js]操作mysql
    [Node.js]操作redis
    关系型数据库同步
    微服务和事件驱动
    如何使用REDIS进行微服务间通讯
    CENTOS7开启SSH服务
    WINDOWS和LINUX相互传文件WINSCP
    WINDOWS远程控制LINUX终端XSHELL
    腾讯云CENTOS7安装MSSQL2017
  • 原文地址:https://www.cnblogs.com/carsonzhu/p/4655573.html
Copyright © 2011-2022 走看看