考虑一个学生表和一个分数表。成绩表列出了学生参加的所有课程的成绩。我想找到平均分数最高的学生。
我会用CTE来解决这个问题,但是MySQL似乎没有提供CTE。我想写一个查询,以找到有最大avg的学生。等级,也避免编写查询,这将得到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)上面的查询给出了错误:表临时不存在。
还有其他方法可以找到那个有最大avg的学生吗?等级,避免写两次内联视图声明?
谢谢!
发布于 2013-09-21 02:51:06
不,你不能。你的选项是复制/粘贴坏小子到另一个子查询中,或者创建一个实际的视图来进行查询。
发布于 2013-09-21 02:54:38
我相信你可以使用有限制的订单,但我从来没有写过任何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;注意:我没有更改您的初始语句,但是您应该使用来自tbl1,tbl2的联接语法
https://stackoverflow.com/questions/18928373
复制相似问题