【SQL刷题系列】:leetcode178 Rank Scores
16lz
2021-01-22
▌题目描述
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的嵌套循环。
更多相关文章
- 不使用 if-elif 语句,如何优雅地判断某个数字所属的等级?
- 图解 LeetCode 第 421 题:数组中两个数的最大异或值
- 图解两数之和的变形题之「有效三角形的个数」
- 我用python掐指一算,2020高考分数和录取情况可能是这样
- python数据分析万字干货!一个数据集全方位解读pandas
- php中比较两个数组差异的方法
- php统计2个数据中同时出现的次数最多的单词
- 用php输出一个数组中的偶数或奇数的方法
- 输入一个数加上12的结果