练习帮助 - 选择平均得分最高的学生的注册号

时间:2012-07-26 14:26:37

标签: mysql sql

我正在大学学习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。无效使用组功能”

可能解决方案是使用嵌套查询,但我无法实现。

3 个答案:

答案 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))

继续努力学习,得到一个可能的答案远比实际得出结论有用。实际上,如果你很幸运,我的建议将无效(我没有经过测试),所以你必须自己做出正确的修改!

相关问题