2011-02-23 65 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 
您正在使用什麼數據庫