计算Postgres中平均值大于X的用户数

时间:2013-10-27 03:04:51

标签: postgresql postgresql-9.1

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

Schema看起来像:

结果

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有关,但是我需要它用于我的Having子句。任何建议我如何能做到这一点表示赞赏。

更新:以下是一些示例数据:http://pastebin.com/k1nH5Wzh(-1表示无人接听)

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

答案 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

相关问题