计算超过平均值的人数



我正在计算有多少人的成绩高于平均水平。
当前返回的是学生人数,当我删除"="从"祝辞=";返回0

SELECT count(*) 
FROM data.students
WHERE grade IN (SELECT grade 
FROM data.students
GROUP BY grade HAVING grade >= AVG(grade));

如果我用一个整数代替avg()函数,我会得到很好的结果。我做错了什么?

计算子查询中的平均值可能是最快的:

SELECT count(*)
FROM   data.students
WHERE  grade > (SELECT avg(grade) FROM data.students);

>而不是>=,因为你说&;高于平均水平&;

我做错了什么?

在子查询中,GROUP BY grade对每个不同的grade值聚合为一行。avg(grade)必须与grade的每一行完全相同(grade IS NULL除外)。解释了你所看到的。
你的查询一开始就太复杂了。

试试这个:

SELECT count(*)
FROM (
SELECT grade >= AVG(grade) OVER () AS tst
FROM data.students
) AS a
WHERE a.tst= True

最新更新