1

我在我的大学学习 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 表的主键,code 用于 Teaching,“student_number”在 Student 中引用“number”,“teaching_code”在 Teaching 中引用“code”。

练习要求选择平均得分最高的学生的数字。

我知道如何编写一个查询,它给我一个包含每个学生平均数的表格,但我不知道如何从中选择最高的或如何显示相应的学生编号!

如果存在一些学生具有相同的最高平均值,则使用限制命令的解决方案不起作用......

显示每个学生的平均分数的查询是:

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。无效使用组功能”

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

4

3 回答 3

0

SELECT MAX(Expression) FROM tables WHERE Condition

您可以查看有关如何使用和找到最高价值的文档。MAX

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

于 2012-07-26T14:37:44.043 回答
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

我没有检查那个查询。可以查询以选择最大平均值是这样的

于 2012-07-26T14:44:19.143 回答
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))

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

于 2012-07-26T17:58:53.730 回答