1

考虑一个学生表和一个成绩表。成绩表包含学生学习的所有课程的成绩。我想找到平均成绩最高的学生。

我会使用 CTE 来解决这个问题,但似乎 MySQL 不提供 CTE。我想写一个查询来找到最大平均数的学生。等级,也避免编写查询,得到平均。所有学生的成绩,不止一次。

一个不起作用的查询如下(这可能会让我更了解我想要实现的目标):

select temp.st_name 
from (select st1.student_name st_name, AVG(grade) avg_grade from Student st1, Grades grd1 where st1.student_id = grd1 .student_id group by st1.student_id,  st1.sudent_name) temp 
where temp.avg_grade = (select MAX(temp.avg_grade) from temp)

上面的查询给出了错误:表临时不存在。

有没有其他方法可以找到最大平均数的学生。等级,避免写两次内联视图语句?

谢谢!

4

2 回答 2

1

我相信您可以将 ORDER BY 与 LIMIT 一起使用,但我从未编写过任何 MYSQL,所以我可能是错的;)

SELECT
    st1.student_name st_name,
    AVG(grade) avg_grade
FROM Student st1, Grades grd1
WHERE st1.student_id = grd1 .student_id
GROUP BY 
    st1.student_id,
    st1.sudent_name
ORDER BY avg_grade DESC
LIMIT 1;

注意:我没有更改您的初始语句,但您应该使用 JOIN 语法而不是 FROM tbl1, tbl2

于 2013-09-21T02:54:38.260 回答
0

不,你不能。您的选择是将那个坏男孩复制/粘贴到另一个子查询中,或者创建一个实际视图来查询。

于 2013-09-21T02:51:06.693 回答