即。一个叫做学生的桌子(假设只有一个学生有这个名字,例如,有两个学生叫约翰史密斯) 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
答案 0 :(得分:3)
如果你需要的只是名字,你可以这样做:
select studentName, avg(studentScore) as avgStudentScore
from students
group by studentName
order by avgStudentScore desc
limit 1
这将仅返回查询的第一行。由于它是由avgStudentScore
订购的,因此它将返回具有最高平均值的学生。
上述解决方案是最简单和最紧凑的解决方案,但它并不是唯一的解决方案。如果你想做到这一点,那么艰难的方式" (使用子查询),您需要做的是:
所以......让我们这么做吧;)
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