我怎样才能找到每门课程的学生ID最高分

Posted

技术标签:

【中文标题】我怎样才能找到每门课程的学生ID最高分【英文标题】:how can i find each course`s student id that has max grade 【发布时间】:2021-03-27 14:51:55 【问题描述】:

我们需要编写一个查询,将所有在他们学习的课程中成绩最高的学生的student_id `s 带入 - 换句话说,它将返回每门课程中最好的学生。 约束:查询必须有子查询

the data base

一开始我是这么写的

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)

如果有人能给我关于使用子查询的任何提示,我将不胜感激

【问题讨论】:

【参考方案1】:

这是一种方法:

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)

【讨论】:

以上是关于我怎样才能找到每门课程的学生ID最高分的主要内容,如果未能解决你的问题,请参考以下文章

找出在每门 sem 和每门课程中得分最高的学生的名字?

sql,查询每门课程最高分的学生的学号,课程号,成绩。再一张表里

这个程序如何返回最高分的学生号和课程号?用函数做。

SQL:查询每门课程的课程名、选课学生姓名及其学号,选课人数

08 学生课程分数的Spark SQL分析

08 学生课程分数的Spark SQL分析