在MYSQL中返回整体评分最高的学生姓名

时间:2015-04-08 15:47:20

标签: mysql

即。一个叫做学生的桌子(假设只有一个学生有这个名字,例如,有两个学生叫约翰史密斯) studentName,studentScore,subject

假设表有这个

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

我试图通过计算所有学生的平均最高分来找到得分最高的学生

这里将选择最高的平均值,而不是具有该平均值的学生姓名:

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

THX

2 个答案:

答案 0 :(得分:3)

如果你需要的只是名字,你可以这样做:

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

这将仅返回查询的第一行。由于它是由avgStudentScore订购的,因此它将返回具有最高平均值的学生。


上述解决方案是最简单和最紧凑的解决方案,但它并不是唯一的解决方案。如果你想做到这一点,那么艰难的方式" (使用子查询),您需要做的是:

  1. 计算每个学生的平均值
  2. 获得最高的平均值
  3. 过滤平均成绩最高的学生
  4. 所以......让我们这么做吧;)

    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
        )
    

    请注意,通过这种方法,最终结果可能不是唯一的(即可能有一个或多个学生具有相同的平均值,并且平均值最高)。

答案 1 :(得分:0)

使用此查询:

SELECT studentName, max( mark ) as maxMark FROM `student` GROUP BY studentName