2

同じ家に住んでいて、「DEMO」、「REP」、または「DEMO-REP」に投票した有権者の数を数える方法を見つける必要があります。私はこれまでにこれを手に入れました、http://sqlfiddle.com/# !3 / 469d4 / 3

たとえば、マイルとラクエルは同じ家に住んでいて、両方とも「REP」に投票した場合、「REP」列にカウントされます。クリスとタニアは両方とも同じ家に住んでいて、「REP」と「DEMO」に投票したので、「DEMO-REP」列に入れます。フィドルの結果はである必要があります。

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

前もって感謝します

4

2 に答える 2

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

ここでは、データに世帯フィールドがないため、「住所」は世帯のプロキシであると想定します。

于 2012-07-23T16:20:59.750 に答える
0

編集:これはSQLFiddleコードで機能します。

私はこれをします:

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
于 2012-07-23T16:38:30.357 に答える