【问题标题】: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() 函数,我会得到很好的结果。 我做错了什么?

【问题讨论】:

    标签: sql postgresql aggregation


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-29
        • 1970-01-01
        • 1970-01-01
        • 2013-01-14
        • 2013-04-19
        • 2018-10-23
        • 2011-01-03
        • 2017-09-26
        相关资源
        最近更新 更多