2013-09-21 38 views
1

考虑一个Student表和一个Grades表。成绩表具有学生参加的所有课程的成绩。我想找到平均成绩最高的学生。有没有办法避免在MySQL中多次编写内联视图

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

不起作用查询如下(这可能会给予更多的想法,我想达到的目标):

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) 

上面的查询提供了错误:表温度不存在。

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

谢谢!

回答

0

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

+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; 

注:我没有改变你最初的说法,但你应该是使用FROM TBL1在JOIN语法,tbl2的

+0

其实,这可能会工作。没看过的问题不够仔细,只专注于“你可以在CTE中使用MySQL”部分。很好的解决方案。 –

+0

谢谢f或答复,但如果有不止一名学生的平均成绩最高,我认为这不会奏效。 –

+0

@NitinYadav,那么在这种情况下,除了执行查询查询之外别无选择。 – plalx

相关问题