LeetCode174数据库中等题

编写一个 SQL 查询来实现分数排名。

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


例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):

在这里插入图片描述
**重要提示:对于 MySQL 解决方案,如果要转义用作列名的保留字,可以在关键字之前和之后使用撇号。例如 " Rank" **

#1、先得到分数的排序

# Write your MySQL query statement below
1、先得到分数的排序,降序
select a.Score as Score
from Scores a
order by a.Score desc

2、算出排名,大于3.9的,使用distinct关键字用来降重,本列中大于3.9的有两个,去重后Rank这一列为1
select count(distinct b.Score) as `Rank`
from Scores b
where b.Score>=3.9

3、得到结果
select a.Score as Score,
(
#也是通过自连接,在b(别名)表中找到大于等于a(别名)表的个数
select count(distinct b.Score)
from Scores b
where b.Score>=a.Score
)as `Rank`
from Scores a
#根据a表中的Score降序排列
order by a.Score desc

猜你喜欢

转载自blog.csdn.net/weixin_48167570/article/details/120608557