我在大学学习SQL,当时我正在练习这个练习,结果被卡住了!我有一个数据库,里面存储了一个学生在特定教学中通过的所有考试。
以下是数据库中的表:
Student(**number**, name, birthday)
Exam(**student_number**, **teaching_code**, vote) *(store the exams passed by the students with vote)*
Teaching(**code**, name)
其中,数字是"学生"表的主键,代码是"教学","Student_number"在"学生"中引用"数字","Teaching_code"在"教学"中参考"代码"。
练习要求选择平均得分最高的学生的数字。
我知道如何编写一个查询,它会给我一个包含每个学生平均值的表,但我不知道如何从中选择最高的,也不知道如何显示相应的学生编号!
如果存在一些学生具有相同的最高平均值,那么使用limit命令的解决方案就不起作用。。。
显示每个学生平均成绩的查询是:
select avg(e.vote) as Average from STUDENT s, EXAM e
where s.number = e.student_number
group by s.number
编辑:我试过SQL中的MAX函数,我试过这个:
select MAX( avg(e.vote) ) as Average from STUDENT s, EXAM e
where s.number = e.student_number
group by s.number
但上面写着"错误代码:1111。无效使用组功能"
可能解决方案是使用嵌套查询,但我无法实现。
SELECT MAX(Expression)
FROM tables
WHERE Condition
您可以查看有关如何使用MAX
的文档并找到最高值。
如果要选择TOP
5、10或20…最高值,请使用TOP子句。
select student_code, MAX(avg_vote)
FROM (
SELECT student_code, AVG( vote) as avg_vote
FROM Exam
GROUP BY student_Code ) t
GROUP BY student_code
我没有检查那个查询。可以查询以选择最大平均值与类似
很遗憾MySQL似乎不支持CTE,那么这就太简单了。
select t.student_code, t.avg_vote
FROM (SELECT student_code, AVG(vote) as avg_vote
FROM Exam
GROUP BY student_Code) t
WHERE t.avg_vote = (select max(avg_vote)
FROM (SELECT student_code, AVG(vote) as avg_vote
FROM Exam
GROUP BY student_Code))
继续努力学习,得到一个可能的答案远不如自己真正得出结论有用。事实上,如果你幸运的话,我的建议不会奏效(我还没有测试),所以你必须自己做出正确的修改!