2015-04-08 32 views
0

即表叫學生(假設只有一個學生,那個名字,如心不是兩個學生叫約翰·史密斯)與 studentName,studentScore,主題在MYSQL返回學生姓名與得分最高的整體

假設表有這個

John Smith 40 maths 
bob grey 20 english 
anne hank 23 english 
John Smith 30 english 
anne grey 10 maths 

我試圖通過計算最大所有學生的平均值,以找到最得分最高的學生

此,這裏將選擇最高的平均水平,但不是學生姓名機智h上平均:

SELECT MAX(avgStudentScore) 
FROM (SELECT AVG(studentScore) AS avgStudentScore FROM students GROUP BY studentName) t 

THX

+1

那麼同一個學生會在桌上有多個記錄? – BenM

回答

3

如果你需要的是名稱,你可以做這樣的事情:

select studentName, avg(studentScore) as avgStudentScore 
from students 
group by studentName 
order by avgStudentScore desc 
limit 1 

這將只返回查詢的第一行。由於它的排序是avgStudentScore,它將返回最高平均分的學生。


上述解決方案是最簡單的和緊固件,但它不是唯一的解決方案。如果你想這樣做「辛苦」(與子查詢),你需要做的是:

  1. 計算平均每個學生
  2. 獲得最高平均
  3. 篩選與學生最高平均

所以...讓我們做硬盤的方式;)

select a.studentName 
from 
    (
     select studentName, avg(studentScore) as avgStudentScore 
     from students 
     group by studentName 
    ) as a 
where 
    a.avgStudentScore = (
     select max(avgStudentScore) 
     from (
      select avg(studentScore) as avgStudentScore 
      from students 
      group by studentName 
     ) as a 
    ) 

請注意,這種方法的網絡連接最終結果可能不是唯一的(即,可能有一個或多個學生的平均分數相同,平均分數最高)。

+0

嗨,感謝您的解決方案,但我想知道是否有辦法編輯我的方式,所以它的作品呢?如果不是謝謝你! :d –

相關問題