我正在计算有多少人的成绩高于平均水平。
当前返回的是学生人数,当我删除"="从"祝辞=";返回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