sql - 计算平均人数
问题描述
我试图计算有多少人的成绩高于平均水平。
我目前所拥有的会返回学生人数,当我从 ">=" 中删除“=”时,它会返回 0。
SELECT count(*)
FROM data.students
WHERE grade IN (SELECT grade
FROM data.students
GROUP BY grade HAVING grade >= AVG(grade));
如果我放一个整数而不是avg()
函数,我会得到很好的结果。我究竟做错了什么?
解决方案
在子查询中计算 avg 可能是最快的:
SELECT count(*)
FROM data.students
WHERE grade > (SELECT avg(grade) FROM data.students);
>
而不是>=
,因为你说“比平均成绩高”。
我究竟做错了什么?
在您的子查询中,GROUP BY grade
每个不同的值聚合到一行grade
。avg(grade)
必然与每一行完全相同grade
(除了grade IS NULL
)。解释你所看到的。
您的查询一开始就不必要地复杂。