- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
谁能帮忙解释一下如何解决这个问题?我是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
的帮助表- 注意 (select distinct Score from scores) ranking
.其内容将是:
+----+--+
| Score |
+----+--+
| 3.50 |
| 3.65 |
| 4.00 |
| 3.85 |
+----+--+
注意如何消除所有重复分数(这是 distinct
关键字的目的)。接下来,表之间有一个连接 ranking
和 scores
(隐藏在 where
部分)我们加入来自 scores
的每条记录包含来自 ranking
的所有记录的表格具有更大或相等分数的表。因此,这个中期阶段的结果将是:
+----+-------+---------+
| 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
它将所有具有相同 Id
的记录分组成一个记录。由于在 select
我们有一部分 count(ranking.Score)
,分组的结果就是每个Id
的不同排名分数的计数.自从我们从 ranking
加入以来只有那些大于或等于原始分数的分数,这个计数才会给出请求的排名。我们快完成了:
+----+-------+--------+-------+
| 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 |
+----+-------+--------+-------+
现在是最简单的部分 - order by
按分数对结果排序。自 select
不包括 Id
,该列被省略,我们得到最终结果。希望这对您有所帮助!
附言因为我们使用的是MySQL,所以可以省略scores.Score
来自 group by
部分并仍然在 select
中使用它- 这在其他 SQL 引擎中是不允许的。你表示你是初学者所以不要太担心这个,只是为了完整性而提到它。
关于mysql - 排名分数 Leetcode #178,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48837762/
我正在查看下面的示例代码, r element frequency and column name 并且想知道除了r中的排名和频率之外,是否有任何方法可以显示每列中每个元素的索引。因此,例如,所需的输
我有下表按 Id、Year DESC 排序 ID 年份有效 1 2011 1 1 2010 1 1 2009 0 1 2002 1 4 2013 1 4 2012 1 4 2011 1 等等。 我想要
鉴于此数据 Type Time Outcome Wanted Result 1 8:00 1 1 1 9:00 1 1 1 10:00 1 1 0
我正在寻找一种对两个句子进行排名/匹配的方法。 例如,取以下2个例句。 这是一个简短的句子。 这是一个包含很多单词的长句子。 我的新句子是这是一个句子。 我想将我的新句子与现有句子进行比较。我的新句子
我是 scikit 新手,我正在按照此处的示例 http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_dat
我有一张 table : r_user | r_points | -------------------- user1 | 12 | user2 | 124 | use
我需要获得顶级玩家、给定玩家的排名以及与该给定玩家排名相关的少数玩家。 为了更清楚地解释,下表是我想要的,它显示了得分最高的 3 名玩家、给定玩家的排名 (id=11) 以及得分略高于和低于该给定玩家
我正在尝试创建一个排名(排名)查询。 我使用表users、schedule 和picks来计算排名。然而,这样做的缺陷是,如果用户未提交任何选择,则该用户将不会出现在排名中。 下面的查询返回所有已提交
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: High score system from my iphone game 我的查询是: $sql = "SELEC
我有一个玩家表和MatchUps表。 MatchUps 表具有一个 winner_id 列和一个 loser_id 列。我可以根据一次查询的胜率获得排名/排名吗?如果我能为每个玩家返回这样的东西,那就
我正在尝试创建一个排名/阶梯系统,其中排名最高的氏族 (1) 应位于顶部,排名为 2 的氏族应位于顶部,依此类推。但我无法让它工作......我尝试了不同的方法: PHP: $sql = mysql_
我需要一份游戏中排名最高的玩家列表。排名是即时计算的,数据取自两个表。我设法以正确的方式对它们进行排序,但是@rank:=0 -> @rank:=@rank+1 技巧,其中一个名为 rank 的附加字
下周末我们将进行一场包含 3 项资格赛(半决赛和决赛)的比赛。只有最好的 15 名参赛者才能参加半决赛。只有最好的 6 人才能参加总决赛。 在资格考试中,每项资格考试的分数从 0 到 100 不等 我
我正在尝试找出对我的产品进行加权的最佳方式,以及它们应该以何种顺序出现在主页等地方。 我想处理四个指标并将其转化为排名: 购买产品 产品有多久了(以天为单位) 产品被保存了多少次 产品被浏览了多少次
使用 @N=@N + 1 的经典技巧来获取某些有序列上的项目排名。现在在订购之前,我需要通过将它与其他表内部连接来从基表中过滤掉一些值。所以查询看起来像这样 -: SET @N=0; SELECT
我需要一些帮助来处理在 MySQL 中排名时的关系。例如: 播放器 |积分 玛丽:90 鲍勃:90 吉姆:65 凯文:12 Bob 和 Mary 应该都排名第一。吉姆应该是#3。凯文应该是#4。 My
我正在寻找一种算法,该算法可以为我提供具有特定强度的下一个排列。长度为 n 的排列由元素 (1,2,3,...n) 定义 排列的强度是多少? 长度为 10 的排列的强度定义为 |a1-a2|+|a2-
我正在编写一个具有信誉组件的电子商务引擎。我希望用户能够对项目进行评论和评分,并能够对评论进行评分。 用于根据“最佳”评论对项目进行排序的最佳算法是什么?它必须根据给出最佳评论的人获得的质量评论数量进
我有一个按游戏结果填满游戏的数据库表,想知道我是否可以计算以下内容: GP(玩过的游戏) 获胜 失败 积分(每胜2分,每负1分) 这是我的表结构: CREATE TABLE `results` (
我有一个 users 表,其中有一列名为 money_sent。我想按 money_sent 降序排列此表,然后找出特定用户的“排名”。 例如,只有 111 人比用户 12392 花费更多的钱,因此他
我是一名优秀的程序员,十分优秀!