春招打卡d17n29-leetcode刷题178分数排名

217 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

leetcode刷题178分数排名

前文

本文为leetcode数据库类型题目,题目需要为178,主要考察对于数据库查询语句的应用,题目链接为https://leetcode-cn.com/problems/rank-scores/

题目信息

表: Scores

+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | score | decimal | +-------------+---------+ Id是该表的主键。 该表的每一行都包含了一场比赛的分数。Score是一个有两位小数点的浮点值。

编写 SQL 查询对分数进行排序。排名按以下规则计算:

分数应按从高到低排列。 如果两个分数相等,那么两个分数的排名应该相同。 在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。 按 score 降序返回结果表。

解题思路

根据题目信息,数据库表中有若干分数值,我们需要对于分数值进行排序,同时返回该分数的排名。但是要注意的是,排名只代表分数排名,重复的分数需要保证相同的排名,同时排名结果要保证连续。那么这个问题就转化为查看某个数据在重复状态下的排名。因此想要查询排名,我们便只需要采用select count(distinct score)即可得到对应的排名位置。以此方式,也就可以得到目标的结果。但同时要注意的是,我们需要对于结果进行分数降序排序,题目中有这个要求。至此,题目分析解答完毕。

解题答案

select Score,(select count(DISTINCT Score) from Scores where Score>s.Score) + 1 as "Rank" from Scores s order by Score desc

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。