1112. 每位学生的最高成绩

   日期:2024-12-27    作者:cntaikang 移动:http://ljhr2012.riyuangf.com/mobile/quote/59926.html

力扣题目跳转(1112. 每位学生的最高成绩 - 力扣(LeetCode

1112. 每位学生的最高成绩

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| student_id    | int     |
| course_id     | int     |
| grade         | int     |
+---------------+---------+
(student_id, course_id) 是该表的主键(具有唯一值的列的组合)。
grade 不会为 NULL。

 题目要求

编写解决方案,找出每位学生获得的最高成绩和它所对应的科目,若科目成绩并列,取  最小的一门。查询结果需按  增序进行排序。

查询结果格式如下所示。

示例 1

输入
Enrollments 表+------------+-------------------+
| student_id | course_id | grade |
+------------+-----------+-------+
| 2          | 2         | 95    |
| 2          | 3         | 95    |
| 1          | 1         | 90    |
| 1          | 2         | 99    |
| 3          | 1         | 80    |
| 3          | 2         | 75    |
| 3          | 3         | 82    |
+------------+-----------+-------+
输出
+------------+-------------------+
| student_id | course_id | grade |
+------------+-----------+-------+
| 1          | 2         | 99    |
| 2          | 2         | 95    |
| 3          | 3         | 82    |
+------------+-----------+-------+

case 1 的建表语句。

Create table If Not Exists Enrollments (student_id int, course_id int, grade int)

Truncate table Enrollments

insert into Enrollments (student_id, course_id, grade) values ('2', '2', '95')

insert into Enrollments (student_id, course_id, grade) values ('2', '3', '95')

insert into Enrollments (student_id, course_id, grade) values ('1', '1', '90')

insert into Enrollments (student_id, course_id, grade) values ('1', '2', '99')

insert into Enrollments (student_id, course_id, grade) values ('3', '1', '80')

insert into Enrollments (student_id, course_id, grade) values ('3', '2', '75')

insert into Enrollments (student_id, course_id, grade) values ('3', '3', '82')

一     我们增加一列作为判断每个人最高分的依据。

select
    *,
     rank() over (partition by student_id order by grade desc,course_id) as rn
from Enrollments;

输出如下

二    很明显 rn = 1的为每个人最高的分数。直接选取即可,记得按照要求进行排序。

with tmp as
(select
    *,
     rank() over (partition by student_id order by grade desc,course_id) as rn
from Enrollments)
select student_id,course_id,grade 
from tmp
where rn = 1
order by student_id;

输出如下

以上就是全部答案,如果对你有帮助请点个赞,谢谢。

来源:力扣(leecode

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 转载请注明出处:


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号