2012-07-26 82 views
1

我正在學習SQL,在我的大學裏,我正在練習這個練習並卡住了!我有一個數據庫,存儲學生爲特定教學而通過的所有考試。練習幫助 - 選擇平均得分最高的學生的註冊號

這些都在數據庫中的表:

Student(**number**, name, birthday) 

    Exam(**student_number**, **teaching_code**, vote) *(store the exams passed by the students with vote)* 

    Teaching(**code**, name) 

凡號是學生表的主鍵和代碼是在學生教學,「student_number」引用「數字」和「teaching_code」在教學中引用「代碼」。

練習要求選擇平均得分最高的學生數字。

我知道如何編寫一個查詢,該查詢給了我一張包含每個學生平均數的表格,但我不知道如何從中選擇最高或者如何顯示相應的學生數字!

與limit命令的解決方案,如果存在一些學生具有相同的最高平均不工作...

顯示每個學生的平均成績查詢是:

select avg(e.vote) as Average from STUDENT s, EXAM e 
where s.number = e.student_number 
group by s.number 

編輯: 我試過SQL中的MAX功能,我已經試過這樣:

select MAX(avg(e.vote)) as Average from STUDENT s, EXAM e 
where s.number = e.student_number 
group by s.number 

但它說:「錯誤代碼:1111無效使用組功能的」

可能解決方案是嵌套查詢,但我無法實現它。

+0

因爲這是作業,你應該發佈你已經嘗試過的東西。 – Taryn 2012-07-26 14:28:32

回答

0

SELECT MAX(Expression) FROM tables WHERE Condition

您可以檢查如何使用MAX,找到最高值的documentation

如果要選擇TOP 5或10或20 ...最高,請使用TOP子句。

0
select student_code, MAX(avg_vote) 
FROM (
    SELECT student_code, AVG(vote) as avg_vote 
    FROM Exam 
    GROUP BY student_Code) t 
GROUP BY student_code 

我沒有檢查該查詢。 可能會詢問,以選擇最大平均值是這樣的

+0

謝謝你,但你的查詢完全一樣,我的查詢做了同樣的事情,以顯示每個學生的平均分數 – loru88 2012-07-27 13:15:22

0

很遺憾MySQL似乎不支持CTE,那麼這將是如此簡單。

select t.student_code, t.avg_vote 
FROM (SELECT student_code, AVG(vote) as avg_vote 
     FROM Exam 
     GROUP BY student_Code) t 
WHERE t.avg_vote = (select max(avg_vote) 
        FROM (SELECT student_code, AVG(vote) as avg_vote 
          FROM Exam 
          GROUP BY student_Code)) 

繼續努力學習,而提出了一個可能的答案是比實際達成的結論自己幾乎沒什麼用處。其實,如果你幸運的話,我的建議將不會起作用(我還沒有測試過),所以你必須自己提出正確的修改!

+0

你已經做到了! :D 非常感謝你! 我也理解查詢是如何工作的,它比我預期的要簡單得多。 我被卡住了,因爲我試圖從每個學生的平均水平中選擇最大值 您的查詢會改變每個學生的平均值,並將其與最大平均值進行比較,這是正確的方法! – loru88 2012-07-27 13:17:57