2
昨晚我在这里发布了一些帮助作业。我回到最后一个问题。PostgreSQL HAVING子句
这里的架构的相关部分,我有工作:
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
任何想法?
LoL LoL LoL LoL!你看,我很早以前就注意到,找到自己问题的答案没有更快的方法,而是先正确地提出问题。 – 2010-10-14 21:45:07