首页 > 其他分享 >1112. 每位学生的最高成绩

1112. 每位学生的最高成绩

时间:2024-10-21 20:48:45浏览次数:3  
标签:insert 每位 grade course 1112 student Enrollments 成绩 id

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

表:Enrollments

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

 题目要求:

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

查询结果格式如下所示。

示例 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

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

 转载请注明出处:

1112. 每位学生的最高成绩-CSDN博客(student_id, course_id) 是该表的主键(具有唯一值的列的组合)。我会尽快把力扣上的所有数据库题目发出来。编写解决方案,找出每位学生获得的最高成绩和它所对应的科目,若科目成绩并列,取。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。grade 不会为 NULL。查询结果格式如下所示。https://blog.csdn.net/CYJ1844/article/details/143128050

我会尽快把力扣上的所有数据库题目发出来。感兴趣的可以点个赞与关注。每天不定时跟新。

标签:insert,每位,grade,course,1112,student,Enrollments,成绩,id
From: https://blog.csdn.net/CYJ1844/article/details/143128050

相关文章