美文网首页
Leetcode1112.每位学生的最高成绩(中等)

Leetcode1112.每位学生的最高成绩(中等)

作者: kaka22 | 来源:发表于2020-07-15 10:26 被阅读0次

题目
表: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    |
+------------+-----------+-------+

解答
先选出每个学生的最高成绩

select E.student_id, max(E.grade) as max_grade
from Enrollments as E
group by E.student_id;

用二元in选择出最高成绩对应的情况

select E1.student_id, E1.course_id, E1.grade
from Enrollments as E1
where (E1.student_id, E1.grade) in (select E.student_id, max(E.grade) as max_grade
from Enrollments as E
group by E.student_id);

同分时 对id grade 分组 取最小的课程id即可

select E1.student_id, min(E1.course_id) as course_id, E1.grade
from Enrollments as E1
where (E1.student_id, E1.grade) in (select E.student_id, max(E.grade) as max_grade
from Enrollments as E
group by E.student_id)
group by E1.student_id, E1.grade;

其实对id分组即可

select E1.student_id, min(E1.course_id) as course_id, E1.grade
from Enrollments as E1
where (E1.student_id, E1.grade) in (select E.student_id, max(E.grade) as max_grade
from Enrollments as E
group by E.student_id)
group by E1.student_id
order by E1.student_id;

相关文章

  • Leetcode1112.每位学生的最高成绩(中等)

    题目表:Enrollments (student_id, course_id) 是该表的主键。 编写一个 SQL ...

  • Leetcode 1112. 每位学生的最高成绩

    https://leetcode-cn.com/problems/highest-grade-for-each-s...

  • leetcode sql 经典70题总结四(集合,行转列,上下级

    一.集合 1.in是可以多字段使用 1112. 每位学生的最高成绩 表:Enrollments +--------...

  • 学生案例~李

    学生状况,初一入班成绩中等,或者中等偏下,各科成绩及格及格线上,疫情期间网课学习习惯不好,各科成绩均有所下降,...

  • 1004

    //1004 成绩排名 (20)(20 分)//读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓...

  • Mysql 一些例题

    求每个班级的最高成绩 学生表如下: 分数表如下: # 查询每个班的最高成绩 SELECT student_name...

  • 好多事,只能说给自己听

    我是一个学生,大学生。长相平凡普通,家境中等,成绩中等偏上,性格内向朋友很少,没有个性,也没有男朋友。在这个...

  • 成绩中等且配合的学生辅导方法

    章老师思维导图专注7-12岁学生,让你的孩子聪明10倍; 每篇文章为你孩子赋能 1年16天 我们回顾一下三类配合的...

  • 1004. 成绩排名 (20)

    1004. 成绩排名 (20) 读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。 输入...

  • Python PAT 乙级考试1004

    1004成绩排名(20 分) 读入n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。...

网友评论

      本文标题:Leetcode1112.每位学生的最高成绩(中等)

      本文链接:https://www.haomeiwen.com/subject/emcdhktx.html