2013-09-21 64 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

相關問題