2015-04-08 35 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 –

相关问题