计算超过平均数的人数
Calculate number of people over average
我正在计算有多少人的成绩高于平均水平。
我目前拥有的 returns 学生人数以及当我从“>=”中删除“=”时 returns 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 (
SELECT grade >= AVG(grade) OVER () AS tst
FROM data.students
) AS a
WHERE a.tst= True
在子查询中计算平均值可能是最快的:
SELECT count(*)
FROM data.students
WHERE grade > (SELECT avg(grade) FROM data.students);
>
而不是 >=
,因为你说 “成绩高于平均水平”。
What am I doing wrong?
在您的子查询中,GROUP BY grade
聚合到每个不同值 grade
的一行。 avg(grade)
必然与每一行的 grade
完全相同(grade IS NULL
除外)。解释你所看到的。
您的查询一开始就过于复杂。
我正在计算有多少人的成绩高于平均水平。
我目前拥有的 returns 学生人数以及当我从“>=”中删除“=”时 returns 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 (
SELECT grade >= AVG(grade) OVER () AS tst
FROM data.students
) AS a
WHERE a.tst= True
在子查询中计算平均值可能是最快的:
SELECT count(*)
FROM data.students
WHERE grade > (SELECT avg(grade) FROM data.students);
>
而不是 >=
,因为你说 “成绩高于平均水平”。
What am I doing wrong?
在您的子查询中,GROUP BY grade
聚合到每个不同值 grade
的一行。 avg(grade)
必然与每一行的 grade
完全相同(grade IS NULL
除外)。解释你所看到的。
您的查询一开始就过于复杂。