2012-07-26 84 views
1

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

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

+0

因为这是作业,你应该发布你已经尝试过的东西。 – Taryn 2012-07-26 14:28:32

回答

0

SELECT MAX(Expression) FROM tables WHERE Condition

您可以检查如何使用MAX,找到最高值的documentation

如果要选择TOP 5或10或20 ...最高,请使用TOP子句。

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 

我没有检查该查询。 可能会询问,以选择最大平均值是这样的

+0

谢谢你,但你的查询完全一样,我的查询做了同样的事情,以显示每个学生的平均分数 – loru88 2012-07-27 13:15:22

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

继续努力学习,而提出了一个可能的答案是比实际达成的结论自己几乎没什么用处。其实,如果你幸运的话,我的建议将不会起作用(我还没有测试过),所以你必须自己提出正确的修改!

+0

你已经做到了! :D 非常感谢你! 我也理解查询是如何工作的,它比我预期的要简单得多。 我被卡住了,因为我试图从每个学生的平均水平中选择最大值 您的查询会改变每个学生的平均值,并将其与最大平均值进行比较,这是正确的方法! – loru88 2012-07-27 13:17:57