我如何才能找到每门课程的学生id中有最高分数



我们需要编写一个查询,该查询将显示所有在所学课程中成绩最高的学生的student_id,换句话说,它将返回每门课程中最好的学生。约束:查询必须具有子查询

数据库

一开始,我试着把它写得像一样

select student_id
from Student s
where s.course_id in
(select course_id, max(grade) from course c, grade g
where g.course_id = c.course_id
group by course_id)

但我认为它不起作用,因为子查询只会返回所有课程的最高分数。所以我试过了,但我不确定它是否有效。

select student_id
from Student s
where s.course_id in
(select course_id from grade g1
where g1.grade = (select max(grade) from grade g where g.course_id = s.course_id)

如果有人能给我任何使用子查询的提示,我将非常感谢

这里有一种方法:

select c.course_name, s.student_name, g.grade
from grade g 
inner join course c on c.course_id = g.course_id
inner join student s on s.student_id = g.student_id
where g.grade = (select max(g1.grade) from grade g1 where g1.course_id = g.course_id)

逻辑是连接三个表,并使用相关的子查询来筛选每个课程的最高成绩。

这带来了每门课程的最高分数,以及相应的学生。如果有顶级平局,它们都会出现在结果中。

当然,如果你只想要学生的id,当然,连接是不必要的,你可以做:

select g.*
from grade g
where grade = (select max(g1.grade) from grade g1 where g1.course_id = g.course_id)

最新更新