zoukankan      html  css  js  c++  java
  • 178. Rank Scores【leetcode】,sql

    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    |
    +-------+------+
    #--解法一 笛卡尔连接 分组计数 排序
    SELECT Scores.Score, COUNT(Ranking.Score) AS RANK
      FROM Scores
         , (
           SELECT DISTINCT Score
             FROM Scores
           ) Ranking
    #--等于是分组计数 每个分组中方的都是比自己大或相等的所有distinct元素
     WHERE Scores.Score <= Ranking.Score
    # --分组
     GROUP BY Scores.Id, Scores.Score 
    # --组id排序 降序
     ORDER BY Scores.Score DESC; 
     
    #--解法二 mysql自定义变量
    #-- Write your MySQL query statement below
    SELECT Score, Rank 
    FROM(
      SELECT    Score,
    #--每一次都每一行都进行判断和计算
    #--2 当值为Score,返回0, 否则返回1 也就是不重复的自增 重复的不变
                @curRank := @curRank + IF(@prevScore = Score, 0, 1) AS Rank,
                @prevScore := Score
    #--1 初始变量值设置为0
      FROM      Scores s, (SELECT @curRank := 0) r, (SELECT @prevScore := NULL) p
    #--3 降序排列
      ORDER BY  Score DESC
    ) t;
    不积跬步无以至千里,千里之堤毁于蚁穴。 你是点滴积累成就你,你的丝丝懒惰毁掉你。 与诸君共勉
  • 相关阅读:
    js1
    curl获取图片
    TP中讲的两种ajax方法
    tp验证码
    TP上传图片
    TP中登录验证
    tp中自定义跳转页面
    用户数据库表状态一类的问题
    用php实现斐波那契数列
    微信的网页授权登陆
  • 原文地址:https://www.cnblogs.com/haoHaoStudyShare/p/7441400.html
Copyright © 2011-2022 走看看