当前位置: 代码迷 >> 综合 >> leetcode-Database-1112|每位学生的最高成绩
  详细解决方案

leetcode-Database-1112|每位学生的最高成绩

热度:95   发布时间:2023-12-12 12:42:15.0

原题

SQL架构
表:Enrollments+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| student_id    | int     |
| course_id     | int     |
| grade         | int     |
+---------------+---------+
(student_id, course_id) 是该表的主键。编写一个 SQL 查询,查询每位学生获得的最高成绩和它所对应的科目,若科目成绩并列,取 course_id 最小的一门。查询结果需按 student_id 增序进行排序。查询结果格式如下所示: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    |
+------------+-----------+-------+Result 表:
+------------+-------------------+
| student_id | course_id | grade |
+------------+-----------+-------+
| 1          | 2         | 99    |
| 2          | 2         | 95    |
| 3          | 3         | 82    |
+------------+-----------+-------+

思路

先筛选一次,再in筛选。

代码

SELECT student_id,MIN(course_id) AS course_id,grade 
FROM Enrollments
WHERE (student_id,GRADE) IN(
select student_id,max(grade) as grade
from Enrollments
group by student_id
)
GROUP BY student_id
ORDER BY student_id
  相关解决方案