首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL HAVING子句

PostgreSQL HAVING子句
EN

Stack Overflow用户
提问于 2010-10-15 05:28:49
回答 1查看 1.8K关注 0票数 2

我昨晚在这里发帖寻求一些家庭作业的帮助。我要问最后一个问题了。

下面是我正在使用的模式的相关部分:

代码语言:javascript
复制
CREATE TABLE votesOnPoll(
  user_id int,
  poll_id int,
  option_id int, 
  voteDate date,
  CONSTRAINT votesOnPoll_pk PRIMARY KEY (user_id, poll_id),
  CONSTRAINT votesOnPoll_user_fk FOREIGN KEY (user_id) REFERENCES users(id),
  CONSTRAINT votesOnPoll_poll_fk FOREIGN KEY (poll_id,option_id) REFERENCES pollOptions(poll_id, option_id)
);

我正在尝试编写一个查询,该查询将返回投票次数最多的投票选项的option_id。这只是在投票10上。

我可以使用以下查询成功返回每个选项的票数:

代码语言:javascript
复制
SELECT p10.oid AS option_id, MAX(p10.votecount)
FROM (SELECT option_id AS oid, COUNT(DISTINCT user_id) AS votecount
      FROM votesOnPoll
      WHERE poll_id = 10
      GROUP BY option_id) AS p10
GROUP BY p10.oid;

在这种情况下,它返回以下关系:

代码语言:javascript
复制
option_id | max
----------+-----
        0 |   7
        1 |  10
        2 |  11

我想把它修剪一下,这样它就只有元组(2, 11) (或者任何获胜的选项)。我认为我可以通过添加以下HAVING子句来实现这一点:

代码语言:javascript
复制
HAVING COUNT(p10.votecount) >= ALL (SELECT COUNT(DISTINCT user_id)
                                    FROM votesOnPoll
                                    WHERE poll_id = 10
                                    GROUP BY option_id)

但是,这将返回一个空关系。

我已经确认内部SELECT语句返回我所期望的内容-即,它返回具有单个属性的关系,该属性是对特定选项的投票数。在本例中,返回值为:

代码语言:javascript
复制
 count
-------
     7
    10
    11

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2010-10-15 05:31:05

在发布这篇文章大约5秒后,我发现了这个错误。我没有说"HAVING COUNT(...)",而是使用了"HAVING MAX(...)",我得到了正确的信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3937741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档