0

我试图找出平均得分为 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 表示未回答)

谢谢!

4

2 回答 2

1

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

SELECT COUNT(*) FROM 
   (SELECT "user" FROM results WHERE (score >0) GROUP BY "user" 
        HAVING (sum(score) / count(distinct(test_no))) >= 80)) q1;
于 2013-10-27T04:15:46.063 回答
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

于 2013-10-28T02:54:33.840 回答