【问题标题】:Counting Number of Users Whose Average is Greater than X in Postgres在 Postgres 中统计平均值大于 X 的用户数
【发布时间】:2013-10-27 03:04:50
【问题描述】:

我试图找出平均得分为 80 或更高的用户数量。我在查询中使用Having,但它没有返回行数。

架构如下:

结果

user
test_no
question_no
score

我的查询:

SELECT "user" FROM results WHERE (score >0) GROUP BY "user" 
        HAVING (sum(score) / count(distinct(test_no))) >= 80;

我明白了:

user
2
4
8
(3 rows)

相反,我想得到3(行数)作为输出。如果我做count("user"),我会得到每个用户的测试次数。

我知道这与使用 Group By 有关,但我需要它作为我的 Being 子句。任何我如何做到这一点的建议表示赞赏。

更新:以下是一些示例数据:http://pastebin.com/k1nH5Wzh(-1 表示未答复)

谢谢!

【问题讨论】:

    标签: postgresql postgresql-9.1


    【解决方案1】:

    您找到的查询很好。一些小的简化:

    SELECT count(*) AS ct
    FROM  (
       SELECT 1
       FROM   result
       WHERE  score > 0
       GROUP  BY user_id
       HAVING (sum(score) / count(DISTINCT test_no)) >= 80
       ) sub
    
    • DISTINCT 不需要括号。

    • 您可以在子查询中SELECT 一个常量值。该值无关紧要,因为您只会计算行数。略短且便宜。

    不要使用保留字user 作为列名。那是自找麻烦。我改用user_id

    【讨论】:

      【解决方案2】:

      我不确定这是否是一种有效的方法,但这似乎有效。

      SELECT COUNT(*) FROM 
         (SELECT "user" FROM results WHERE (score >0) GROUP BY "user" 
              HAVING (sum(score) / count(distinct(test_no))) >= 80)) q1;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-24
        • 2013-03-06
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 2014-11-27
        相关资源
        最近更新 更多