mysql – Rank Scores_leetcode#178
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – Rank Scores_leetcode#178,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2786字,纯文字阅读大概需要4分钟。
内容图文
![mysql – Rank Scores_leetcode#178](/upload/InfoBanner/zyjiaocheng/906/b013346d950642e8ac37d4fbd48bfcb2.jpg)
有人可以帮忙解释如何解决这个问题吗?我是sql的初学者,不知道如何使用变量.
编写SQL查询以给出Scores表的分数排名.如果两个分数之间存在平局,则两者应具有相同的排名.请注意,在平局之后,下一个排名数应该是下一个连续的整数值.换句话说,等级之间不应该存在“漏洞”.
https://leetcode.com/problems/rank-scores/description/
我已经在讨论论坛中查看了解决方案,但仍无法理解其背后的逻辑.如果有人能够提供一步一步的解释,将不胜感激.
其中一个可能的解决方案是(没有变量):
select scores.Score, count(ranking.Score) as Rank
from scores, (select distinct Score from scores) ranking
where ranking.score>=scores.Score
group by scores.Id
order by scores.Score desc
谢谢!
解决方法:
让我们首先看一下预期输入和输出的示例:
INPUT
+----+-------+
| Id | Score |
+----+-------+
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
+----+-------+
OUTPUT
+-------+------+
| Score | Rank |
+-------+------+
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 2 |
| 3.65 | 3 |
| 3.65 | 3 |
| 3.50 | 4 |
+-------+------+
因此,任务是将所有相同的分数分组,然后从最大到最小排序.让我们一步一步看看你提到的解决方案是如何实现的.首先,它创建一个名为ranking – note(从分数中选择不同分数)排名的帮助表.其内容将是:
+----+--+
| Score |
+----+--+
| 3.50 |
| 3.65 |
| 4.00 |
| 3.85 |
+----+--+
注意所有重复分数是如何被消除的(这是不同关键字的目的).接下来,表格排名和得分(隐藏在哪里部分)之间存在联接,我们从得分表加入每个记录,其中所有记录来自排名表,得分大于或等于.因此,这个中期阶段的结果将是:
+----+-------+---------+
| Id | Score | r.Score |
+----+-------+---------+
| 1 | 3.50 | 3.50 |
| 1 | 3.50 | 3.65 |
| 1 | 3.50 | 3.85 |
| 1 | 3.50 | 4.00 |
| 2 | 3.65 | 3.65 |
| 2 | 3.65 | 3.85 |
| 2 | 3.65 | 4.00 |
| 3 | 4.00 | 4.00 |
| 4 | 3.85 | 3.85 |
| 4 | 3.85 | 4.00 |
| 5 | 4.00 | 4.00 |
| 6 | 3.65 | 3.65 |
| 6 | 3.65 | 3.85 |
| 6 | 3.65 | 4.00 |
+----+-------+---------+
接下来是group by by将具有相同Id的所有记录分组到一个记录中.由于在选择部分我们有计数(ranking.Score),因此分组的结果将是每个Id的不同排名分数的计数.而且,由于我们仅从排名中加入了大于或等于原始分数的分数,因此此计数将提供所请求的排名.我们差不多完成了:
+----+-------+--------+-------+
| Id | count(r.Score) | Score |
+----+-------+--------+-------+
| 1 | 4 | 3.50 |
| 2 | 3 | 3.65 |
| 3 | 1 | 4.00 |
| 4 | 2 | 3.85 |
| 5 | 1 | 4.00 |
| 6 | 3 | 3.65 |
+----+-------+--------+-------+
现在最简单的部分 – 通过分数对结果进行排序的顺序.由于select不包含Id,因此省略该列,我们得到最终结果.希望这可以帮助!
附:因为我们使用MySQL,所以我们可以逐个省略score.Score并且仍然在select中使用它 – 这在其他SQL引擎中是不允许的.你表示你是初学者,所以不要担心这个,只要提一下它就完整了.
内容总结
以上是互联网集市为您收集整理的mysql – Rank Scores_leetcode#178全部内容,希望文章能够帮你解决mysql – Rank Scores_leetcode#178所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。