计算平均人数
Posted
技术标签:
【中文标题】计算平均人数【英文标题】:Calculate number of people over average 【发布时间】:2021-12-13 23:23:12 【问题描述】:我正在计算有多少人的成绩高于平均水平。 我目前所拥有的是返回学生人数,当我从 ">=" 中删除“=”时,它返回 0。
SELECT count(*)
FROM data.students
WHERE grade IN (SELECT grade
FROM data.students
GROUP BY grade HAVING grade >= AVG(grade));
如果我输入一个整数而不是 avg()
函数,我会得到很好的结果。
我做错了什么?
【问题讨论】:
【参考方案1】:在子查询中计算平均值可能是最快的:
SELECT count(*)
FROM data.students
WHERE grade > (SELECT avg(grade) FROM data.students);
>
而不是>=
,因为你说“比平均成绩高”。
我做错了什么?
在您的子查询中,GROUP BY grade
聚合为每个不同的 grade
值一行。对于每一行,avg(grade)
必然与grade
完全相同(grade IS NULL
除外)。解释您所看到的。
您的查询一开始就不必要地复杂。
【讨论】:
【参考方案2】:试试这个:
SELECT count(*)
FROM (
SELECT grade >= AVG(grade) OVER () AS tst
FROM data.students
) AS a
WHERE a.tst= True
【讨论】:
以上是关于计算平均人数的主要内容,如果未能解决你的问题,请参考以下文章
c语言:输入10个学生的成绩,求学生的平均成绩,并统计超过平均分数的学生人数。