Leetcode_178.分数排名

题目难度

中等

题目描述

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

在这里插入图片描述
例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):
在这里插入图片描述

正确答案
SELECT a.score AS Score, 
	COUNT(DISTINCT b.score) AS Rank
FROM scores a JOIN scores b
WHERE  b.score >= a.score
GROUP BY a.id
ORDER BY a.score DESC;
分析
  • 两个表自连接(笛卡儿积)
  • 选出分数>=我的人,当作我的排名
  • 以学生id分组,将每个人看成一组,count大于等于自己的人数

比如:有两个人比我成绩高,加上我的成绩正好三个人,我排第三。这里前两个成绩必须不同,所以在count成绩的时候加了distinct去重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值