2012-07-23 33 views
2

我需要找到一种方法来计算居住在同一家中并且投票了“DEMO”,“REP”或“DEMO-REP”的选民人数。我已经得到这个目前为止,http://sqlfiddle.com/#!3/469d4/3对满足两个单独标准的人员的查询

例如,英里和Raquel住在同一个房子,并且都投了'REP',他们将被计入'REP'列。克里斯和塔尼亚都住在同一栋房子里,并投了'REP'和'DEMO',所以他们将进入'DEMO-REP'专栏。 小提琴结果需要。

1 http://img824.imageshack.us/img824/3305/resultbx.png

在此先感谢

+0

不知道我理解。看起来你有来自7个不同家庭的11票,但只占4个。你是否不想只返回一次投票结果? – 2012-07-23 16:19:22

+0

是的,在真正的查询中,我想要返回只投一次的家庭的结果,我只是将这部分留给了这个问题。谢谢 – user973671 2012-07-23 16:36:41

回答

0

我想这你想要做什么:

select sum(votes) as total, sum(demo*(1-rep)) as demoonly, 
     sum(rep*(1-demo)) as reponly, sum(demo*rep) as demorep 
from (select address, cont(*) as votes, 
      max(case when voted = 'DEMO' then 1 else 0 end) as demo, 
      max(case when voted = 'REP' then 1 else 0 end) as rep 
     from t 
     group by address 
    ) t 

假设你想户(地址)与一个以上的人:

select sum(votes) as total, sum(demo*(1-rep)) as demoonly, 
     sum(rep*(1-demo)) as reponly, sum(demo*rep) as demorep 
from (select address, count(*) as votes, 
      max(case when voted = 'DEMO' then 1 else 0 end) as demo, 
      max(case when voted = 'REP' then 1 else 0 end) as rep 
     from test4 
     group by address 
     having count(distinct name) > 1 
    ) t 

在这里,我假设“地址”是家庭的代理人,因为数据中没有家庭字段。

+1

我不认为这会给出正确的结果,我让它在小提琴上工作,http://sqlfiddle.com/#!3/469d4/23。谢谢 – user973671 2012-07-23 16:42:51

+0

您是否修复了查询?我想你在我回答后澄清了这个问题。 – 2012-07-23 17:23:12

+0

不,它仍然是不固定的,谢谢 – user973671 2012-07-23 21:49:08

0

编辑:这适用于您的SQL小提琴代码。

我会这样:

SELECT COUNT(Voted) AS TOTAL, 
(
SELECT COUNT(DISTINCT address) FROM test4 
WHERE address NOT IN (SELECT address FROM test4 WHERE Voted = 'REP') 
) AS Demo, 
(SELECT COUNT(DISTINCT address) FROM test4 
WHERE address NOT IN (SELECT address FROM test4 WHERE Voted = 'DEMO') 
) AS Rep, 
(SELECT COUNT(DISTINCT address) FROM test4 
WHERE address IN (SELECT address FROM test4 WHERE Voted = 'REP') AND address IN (SELECT address FROM test4 WHERE Voted = 'DEMO') 
) AS DemoRep 
    FROM test4 
+0

不幸的是,表中没有HouseholdID,谢谢 – user973671 2012-07-23 16:54:30

+0

如果您将“Address”替换为“HouseholdID”,它应该也能正常工作。 – ristonj 2012-07-23 19:52:18

+0

对不起,我觉得有些困惑,如果地址匹配,那么家庭应该被视为一个家庭,唯一的家庭应该出现在结果中。谢谢 – user973671 2012-07-23 22:03:09

相关问题