▌题目描述


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.

编写一个 SQL查询来对分数排名。如果两个分数相同,那么两个分数应该有同样的排名。但也请注意,如果平分,那么下一个名次应该是下一个连续的整数值。换句话说,名次之间没有“间隔”。


+----+-------+
| 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    |
+-------+------+


▌参考答案


SELECT Score, 
    (
        SELECT COUNT(DISTINCT b.Score) + 1 
        FROM Scores AS b 
        WHERE b.Score > Scores.Score 
        LIMIT 1
    ) AS Rank 
FROM Scores order by Rank ;


▌答案解析


上面参考答案的思路是:利用表自连接。当查询表的每个分数时,都查找比这个分数大的其它分数的个数(不含重复值),然后在这个个数上加1,最后得到的个数就是每个分数的rank。最后用order by将rank排序即可。逻辑上有点类似于两个for的嵌套循环。


©著作权归作者所有:来自51CTO博客作者mb5fe18e9fef50b的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 不使用 if-elif 语句,如何优雅地判断某个数字所属的等级?
  2. 图解 LeetCode 第 421 题:数组中两个数的最大异或值
  3. 图解两数之和的变形题之「有效三角形的个数」
  4. 我用python掐指一算,2020高考分数和录取情况可能是这样
  5. python数据分析万字干货!一个数据集全方位解读pandas
  6. php中比较两个数组差异的方法
  7. php统计2个数据中同时出现的次数最多的单词
  8. 用php输出一个数组中的偶数或奇数的方法
  9. 输入一个数加上12的结果

随机推荐

  1. [导入]Android平台上四种保存数据的方法
  2. android获取屏幕分辨率大小(DisplayMetri
  3. 启动模式详解
  4. android HttpURLConnection 连接网络 读
  5. Android(安卓)获取并显示远程图片 Picass
  6. android——Bitmap.Config ARGB_8888
  7. Android学习札记22:ThumbnailUtils
  8. android 让TextView自带滚动条
  9. [导入]超酷的android翻屏效果,不要错过
  10. Android之桌面组件AppWidget