我昨晚在这里发帖寻求一些家庭作业的帮助。我要问最后一个问题了。
下面是我正在使用的模式的相关部分:
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上。
我可以使用以下查询成功返回每个选项的票数:
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;在这种情况下,它返回以下关系:
option_id | max
----------+-----
0 | 7
1 | 10
2 | 11我想把它修剪一下,这样它就只有元组(2, 11) (或者任何获胜的选项)。我认为我可以通过添加以下HAVING子句来实现这一点:
HAVING COUNT(p10.votecount) >= ALL (SELECT COUNT(DISTINCT user_id)
FROM votesOnPoll
WHERE poll_id = 10
GROUP BY option_id)但是,这将返回一个空关系。
我已经确认内部SELECT语句返回我所期望的内容-即,它返回具有单个属性的关系,该属性是对特定选项的投票数。在本例中,返回值为:
count
-------
7
10
11有什么想法吗?
发布于 2010-10-15 05:31:05
在发布这篇文章大约5秒后,我发现了这个错误。我没有说"HAVING COUNT(...)",而是使用了"HAVING MAX(...)",我得到了正确的信息。
https://stackoverflow.com/questions/3937741
复制相似问题