LeetCode-178. 分数排名( Rank Scores)。

LeetCode力扣刷题数据库(178):分数排名 题目 分析 select Score as Score from Scores; #将选择出来的命名为a select a.Score as Score from Scores as a; #排序 select a.Score as Score from Scores as a order by a.Score DESC; #比较难的是第二部分。假设现在给你一个分数X,如何算出它的排名Ran... 阅读详情

编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。

+----+-------+
| 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    |
+-------+------+
贡献者

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rank-scores

解题:

官方解题一:

使用两个变量,一个用于当前级别,另一个用于以前的分数。Score分数,
@rank排名,第一个变量
@prev上一个成绩,第二个变量
Rank 排名的别名
初始化了排名和上一个成绩,排名0,上一成绩初始化为-1
(@prev <> (@prev := Score)) 真返回1,假返回0,所以这次成绩和上次成绩相等就是假,返回0,两次排名没有变化,因为加的是0;

如果不相等则是真,返回一,上次排名加1,就是新的排名了。

First one uses two variables, one for the current rank and one for the previous score.

SELECT
  Score,
  @rank := @rank + (@prev <> (@prev := Score)) Rank
FROM
  Scores,
  (SELECT @rank := 0, @prev := -1) init
ORDER BY Score desc

相关知识:

用户变量:@变量名。用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效。

mysql给变量赋值:使用:=来给变量赋值。

sql语句中,if(A,B,C)表示,如果A条件成立,那么执行B,否则执行C.(与本题无关)

<> 表示不等于;

官方解题二:

按照成绩排序后,每个成绩对应的没有重复的第几个数,就是排名。成绩高于或等于当前学生成绩的学生数量,成绩相同的只记一次,就是该学生的名次。

嵌套查询用来查询排名,

WHERE Score>=s.Score 子句,限制只返回成绩大于或等于当前学生成绩的记录,相当于实现了成绩从高到低排名。

逻辑类似于循环。

This one counts, for each score, the number of distinct greater or equal scores.

SELECT
  Score,
  (SELECT count(distinct Score) FROM Scores WHERE Score >= s.Score) Rank
FROM Scores s
ORDER BY Score desc

相关知识:

COUNT()函数返回表中的行数。

嵌套查询:在一条sql中嵌套另一条sql.

官方解题三:

和二思路一样,但是有个子查询,先查出来Score表,效果更好。

Same as the previous one, but faster 
because I have a subquery that "uniquifies" the scores first. 
Not entirely sure why it's faster, 
I'm guessing MySQL makes tmp a temporary table and uses it for every outer Score.

SELECT
  Score,
  (SELECT count(*) FROM (SELECT distinct Score s FROM Scores) tmp WHERE s >= Score) Rank
FROM Scores
ORDER BY Score desc

官方题解四:

这个方法用上了id,

s.Score左表成绩小于右表成绩,也就是右表成绩大于左表成绩的成绩去重,就是左表排名。

group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。

将每一个分组的第一个记录组合在一起形成了最终的结果。

本题grder by 后边跟的是id,所以是每列单独分为一个组,

Inspired by the attempt in wangkan2001's answer. Finally Id is good for something :-)

SELECT s.Score, count(distinct t.score) Rank
FROM Scores s JOIN Scores t ON s.Score <= t.score
GROUP BY s.Id
ORDER BY s.Score desc

 

三维重建之条纹投影结构光(一) 该系列为条纹投影结构光学习笔记,一共分为四篇。第一篇记录文献阅读的笔记,对重要知识点进行摘录介绍。 本篇以理论知识推导为主,主要从以下三个方面进行介绍,首先介绍条纹投影的三角测量原理;然后介绍相位主值的求解和相位展开;最后介绍相位和高度的模型,即相高模型。本篇博文不涉及具体的代码实现。 条纹投影结构光测量原理 ... 阅读详情

相关推荐

混合编程实战:C#集成C++ PCL点云处理库,打造跨语言动态链接库

本文详细介绍了C#与C++混合编程实战,重点讲解如何通过动态链接库(DLL)集成C++ PCL点云处理库,实现跨语言协作。内容涵盖环境配置、PCL功能封装、C#调用DLL的完整方案,以及性能优化和错误处理等进阶技巧,帮助开发者高效处理大规模点云数据,提升工业软件开发效率。

weixin_42620913的博客 383

leetcode-mysql(四) 178分数排名 2种思路详细分析

leetcode 分数排名 2种思路分析 178. 分数排名 难度中等 SQL架构 编写一个 SQL 查询来实现分数排名。 如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。 +----+-------+ | Id | Score | +----+-------+ | 1 | 3.50 | | 2 | 3.65 | | 3 | 4.00 | | 4 | 3.85 | | 5 | 4.00 | | 6

weixin_52918377的博客 400

信号完整性基础04:串扰(1)

我们理解了“单个”传输线(传输线是信号路径+回流路径,切记~),但大多数情况下单独“传输线”的情况并不多见(理想情况下的同轴线缆可以算一个),大多数我们PCB板上有成百上千条走线,它们组成了一个“大社会”,就如当年的TVB神剧《创世纪》一样,到处充满着恩怨情仇;稍处理不慎,单板这个“社会”就会崩溃。那么我们要从哪里入手去理解它呢?最基本的就是从两条PCB走线(传输线)之间的串扰开始。好,年前倒数第二章:《为什么会有串扰》。 ps:我们了解了x射线是啥,那么今天开始讲“放射线”,这两种东西是否就是同一种呢~

WKEZHENG的博客 6039

MySQL数据库 - 复杂查询(一)第三关

@R星校长 第3关:分数排名 本关任务:编写SQL查询来实现二种排名方式的分数排名。 score表结构信息如下: Id Score 1 3.52 2 3.65 3 4.23 4 3.85 5 4.23 6 3.65 如果两个分数相同,则两个分数排名(Rank)相同。 情况一:平分后的下一个名次是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。例:1、1、2、3、4、4。 情况二:排名是非连续的。例:1、1、1、4、4、6。 开始你的任务吧,祝你成功! 答案.

qq_44745905的博客 7198

保姆级教程:用NodeMediaClient在Android实现RTMP拉流播放(附避坑指南)

本文提供了一份详尽的Android平台RTMP拉流播放实现与深度调优指南。重点介绍了如何使用NodeMediaClient库进行集成,并针对视频卡顿、花屏等常见问题,从渲染引擎选择(SurfaceView与TextureView)、解码策略、缓冲区优化到高级网络自适应等方面提供了实战解决方案与避坑技巧。

weixin_29261711的博客 442

GAMES104:02引擎架构分层-学习笔记

用户层工具层(Tool Layer):编辑器、工具界面功能层(Function Layer):渲染Rendering、动画Animation、物理Physics、相机Camera和实现游戏性的脚本Script、状态机FSM、AI等功能模块资源层(Resource Layer):各类图片、动画、音频资源加载核心层(Core Layer):核心功能如内存管理、容器分配、数据计算、多线程处理等平台层(Platform Layer):对接不同游戏平台、主机和硬件。

噗噗噗的博客 1268

目标重要性分析

一、背景在电商推荐场景中,商品的排序得分(rankscore)通常是由多个目标分(例如点击率CTR、转换率CVR、多样性得分、利润、GMV等)综合而成。为了定量分析每个目标对最终商品排序的影响,可以采用以下几种方法:二、方法。

程序认生 1362

傅里叶红外(FT-IR):Origin数据处理、光谱绘图、曲线优化、图形美化

双击 X 轴,选择“轴线和刻度线”,设置粗细为“2”(较常用的粗细度),主刻度和次刻度为“朝内”,然后在此对话框内选择左轴,设置粗细为“2”,主刻度和次刻度为“无”,上轴和右轴同左轴。(4)在第二个图层基础上新建第三个图层,针对第二组数据重复上述中(1)和(2)的操作,再添加第三组数据的折线图,并重复上述中(3)的操作。FTIR 光谱上的峰只有相对的强弱,因此只分析一个光谱上的一个峰的强度大小并无意义,一般分析两个光谱在同一位置的峰强相对大小,或者分析同一光谱不同位置的峰强相对大小并与另一光谱进行比较。

qiushireader的博客 3936

sql面试题

sql面试题排名连续无间隔 排名连续无间隔 编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。 +----+-------+ | Id | Score | +----+-------+ | 1 | 3.50 | | 2 | 3.65 | | 3 | 4.00 |...

maqingbin8888的专栏 372

Cadence OrCAD Capture软件启动过程卡死且无法恢复的解决方法

如下图所示Cadence OrCAD Capture软件在启动后出现卡死的现象,且等待后无法自动恢复,需要强行关闭,再次启动依然卡死。

fydar的博客 4045

基于Python的军事装备信息爬虫实战:Scrapy+Playwright+智能反反爬技术

本文将详细介绍如何使用Python构建一个高效的军事装备信息爬虫系统。我们将从基础的HTTP请求开始,逐步深入到使用Scrapy框架、Playwright浏览器自动化以及最新的反反爬技术。文章包含完整的代码实现、性能优化策略以及数据处理方案,旨在为读者提供一个全面的军事信息爬取解决方案。关键词:Python爬虫、军事装备、Scrapy、Playwright、反反爬。

2201_76125261的博客 1157

178. Rank Scores

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

betty1121的博客 208

月薪30k+的工业视觉,必备Java+YOLO技能(工业级落地全拆解)

30k+工业视觉岗的核心不是算法调参,而是用Java把YOLO落地到工业场景的能力——稳运行、能对接、可管理是高薪的核心壁垒;必备技能分五层:模型工业级适配、Java推理核心、SpringBoot后端、工业部署运维、场景适配,每层都要练到“能落地、能讲清、能避坑”;学习路径的核心是“实战驱动”:不要只学理论,从一个完整的工业项目(如锂电缺陷检测)入手,练完就能对标高薪岗。

2601_94871597的博客 526

LeetCode178. Rank Scores - 分数排名 <Medium>

编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。 +----+-------+ | Id | Score | +----+-------+ | 1 | 3.50 | | 2 | 3.65 | | 3 | 4.00 | | 4 | 3.85 | | 5 | 4.00 | | 6 | 3.65 | +----+-------+ 例如,根据上述给定的Scor...

Lazyafei's Blog 323

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode(178):分数排名 Rank Scores(SQL)

2020.2.23 LeetCode 从零单刷个人笔记整理(持续更新) github:https://github.com/ChopinXBP/LeetCode-Babel 传送门:分数排名 编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。 +----+-------+...

NJU_ChopinXBP的博客 575

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[SQL]LeetCode178. 分数排名 | Rank Scores

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/streng...

weixin_30521649的博客 178

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SQL-leetcode-178. 分数排名

表: Scoresid 是该表的主键(有不同值的列)。该表的每一行都包含了一场比赛的分数。Score 是一个有两位小数点的浮点值。编写一个解决方案来查询分数的排名。排名按以下规则计算:分数应按从高到低排列。如果两个分数相等,那么两个分数的排名应该相同。在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。按 score 降序返回结果表。查询结果格式如下所示。示例 1:输入:Scores 表:±—±------+

阿尼古 522

LeetCode: 178. Rank Scores

LeetCode: 178. Rank Scores 题目描述 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 th...

杨领well的专栏 337

leetcode 178 分数排名

在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。该表的每一行都包含了一场比赛的分数。Score 是一个有两位小数点的浮点值。编写一个解决方案来查询分数的排名。如果两个分数相等,那么两个分数的排名应该相同。id 是该表的主键(有不同值的列)。按 score 降序返回结果表。分数应按从高到低排列。查询结果格式如下所示。

e的博客 79

leetcode 178. Rank Scores

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.

星尘 1997

LeetCode(178)-分数排名

题目: 编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。 ±—±------+ | Id | Score | ±—±------+ | 1 | 3.50 | | 2 | 3.65 | | 3 | 4.00 | | 4 | 3.85 | | 5 | 4.0...

Fly_Fly_Zhang的博客 653

LeetCode //MySQL - 178. Rank Scores

【代码】LeetCode //MySQL - 178. Rank Scores。

Made in Code 811

力扣:178. 分数排名(Python3)

力扣:178. 分数排名(Python3)

欢迎光临 908

leetcode 178 Rank Scores

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.

zhangfanhehe_1的专栏 1874

LeetCode178——分数排名

我的LeetCode代码仓:https://github.com/617076674/LeetCode 原题链接:https://leetcode-cn.com/problems/rank-scores/description/ 题目描述: 知识点:SQL变量、子查询、JOIN内连接查询 思路一:子查询查询名次 注意题目要求,名次之间不应该有“间隔”。 时间复杂度是O(n ^ 2)...

清风阁 742

力扣题目-178. 分数排名

仅作学习,不作他用。

徐子元 521
上一篇: LeetCode-177. 第N高的薪水( Nth Highest Salary)。
下一篇: LeetCode-180. 连续出现的数字( Consecutive Numbers)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值