2016-12-27 87 views
-1

我有兩個表上(daily_book和extra_cost),這樣的結構是LEFT JOIN給出不正確的總和結果

daily_book

db_id | refund     
1  | 7161     
2  | 5980     

extra_cost

ec_id | db_id | cost 
1  | 1  | 156 
2  | 1  | 123 
3  | 2  | 100 
4  | 2  | 120 

所以我得到總退款金額和總成本值。

所以我的查詢是

$sql = "SELECT SUM(d.refund) AS refund, SUM(e.cost) AS e_cost FROM `daily_book` d LEFT JOIN extra_cost e ON (d.db_id = e.db_id) WHERE d.db_id > 0"; 

我得到的結果是26282退款和499的總成本;這是不正確的。

我想要的結果是13,141退款和499總成本。

+0

你也可能得到一些http://dba.stackexchange.com/寶貴幫助 – zack6849

+0

你應該更加熟悉SQL連接的工作原理然後再繼續聚合函數,如'sum()'。如果您從查詢中刪除了聚合函數調用,則會在JOIN結果中看到重複的行,從而爲您提供意外的退款總額。 – faintsignal

回答

1

這裏沒有神祕感。您正在彙總多行的退款。你需要分別做聚合。在MySQL中,這是有點麻煩,但這裏有一個方法:

SELECT dd.refund, SUM(e.cost) AS e_cost 
FROM daily_book d LEFT JOIN 
    extra_cost e 
    ON (d.db_id = e.db_id) CROSS JOIN 
    (SELECT SUM(d.refund) as refund FROM daily_book d WHERE d.db_id > 0) dd 
WHERE d.db_id > 0; 
+0

嘿謝謝先生......現在解決先生......再次感謝 –

+1

如果答案解決了您的問題,請接受答案。 [**如何接受答案**](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)@KrunalJSathavaraKinjal – 1000111