sql - 我怎样才能找到每门课程的学生ID最高分
问题描述
我们需要编写一个查询,将student_id
所有在他们学习的课程中成绩最高的学生的 `s 带入 - 换句话说,它将返回每门课程中最好的学生。
约束:查询必须有子查询
起初,我试着这样写
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)
推荐阅读
- nginx - NGINX HTTPS - SSL 证书
- google-docs - 非常频繁您的访问已过期消息
- javascript - 使用包含非 ASCII 字符的 JavaScript 打开文件(德语)
- python-3.x - 使用 bpy 渲染具有顶点颜色的对象或将顶点颜色转换为纹理
- c++ - clang:使用 QHash
而不是 QMap 当 K 是指针时 - python - matplotlib scatterplot 在分类列上获取标记
- angular - 保留在 DOM 中的所有路由的 div
- python - 在 Python 中给出一个与 kwarg 参数同名的参数是不好的做法吗?
- python - Jupyter ipywidgets 框在内容更改后未调整大小
- blockchain - 将使用哪个标准?ERC721 还是 ERC1155?