2011-02-23 61 views
0

这似乎很简单:我有两张选票,我想看看哪些州有不同数量的选票。单独来看,它很容易:SQL:检测两个表之间的总和差异?

select state, sum(votes) from votes_a group by state; 

select state, sum(votes) from votes_b group by state; 

如何查询像state, votes_a, votes_b对于具有不同的结果状态?

+0

? – 2011-02-23 20:53:32

回答

2

尝试加入:

SELECT 
    totals_a.state, 
    totals_a.total_votes, 
    totals_b.total_votes 
FROM 
(
    SELECT state, SUM(votes) AS total_votes 
    FROM votes_a 
    GROUP BY state 
) AS totals_a 
JOIN 
(
    SELECT state, SUM(votes) AS total_votes 
    FROM votes_b 
    GROUP BY state 
) AS totals_b 
ON totals_a.state = totals_b.state 
WHERE totals_a.total_votes <> totals_b.total_votes 

注意,这将错过其接受零票表的一个状态。要解决这个问题,你可以使用FULL OUTER JOIN(假设你的数据库支持这个功能)并检查NULL。

+0

这将给出如 状态,votes_a 状态,votes_b 不是请求的 状态,votes_a,votes_b – Karl 2011-02-23 21:59:57

+0

@Karl:现在修复,谢谢! :) – 2011-02-23 22:06:57

0

尝试......

select state, sum(votes_a), sum(votes_b) 
from (select state, sum(votes) votes_a, 0 votes_b 
     from votes_a 
     group by state) tbl_a 
    (select state, 0 votes_a, sum(votes) votes_b 
     from votes_b 
     group by state) tbl_b 
where tbl_a.state = tbl_b.state 
group by state 
您正在使用什么数据库