我正在大学学习SQL,我正在练习这个练习并且卡住了!我有一个数据库,存储学生为特定教学传递的所有考试。
这些是数据库中的表格:
Student(**number**, name, birthday)
Exam(**student_number**, **teaching_code**, vote) *(store the exams passed by the students with vote)*
Teaching(**code**, name)
其中number是Student表的主键,代码是Teaching,“student_number”在Student中引用“number”,“teaching_code”在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。无效使用组功能”
可能解决方案是使用嵌套查询,但我无法实现。
答案 0 :(得分:0)
SELECT MAX(Expression)
FROM tables
WHERE Condition
您可以查看documentation如何使用MAX
并找到最高价值。
如果要选择TOP
5或10或20 ...最高,请使用TOP子句。
答案 1 :(得分:0)
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
我没有检查过该查询。 可以查询选择最大平均值是那样的
答案 2 :(得分:0)
可惜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))
继续努力学习,得到一个可能的答案远比实际得出结论有用。实际上,如果你很幸运,我的建议将无效(我没有经过测试),所以你必须自己做出正确的修改!