LeetCode 1112.每位学生的最高成绩

数据

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');

需求

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

输入

LeetCode 1112.每位学生的最高成绩_第1张图片

输出

with t1 as (
    select *,
       rank() over (partition by student_id order by grade desc) as rn1
    from Enrollments
),t2 as (
   select *,
       row_number() over (partition by student_id order by course_id) as rn2
    from t1
    where rn1=1
)
select student_id, course_id, grade
from t2
where rn2=1;

LeetCode 1112.每位学生的最高成绩_第2张图片

你可能感兴趣的:(leetcode,数据库,mysql)