有没有办法避免在MySQL中多次编写内联视图

时间:2013-09-21 02:45:50

标签: mysql inline-view

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

我会用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)

上述查询给出错误:表temp不存在。

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

谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

不,你不能。您可以选择将该坏孩子复制/粘贴到另一个子查询中,或者创建一个实际视图来进行查询。