2011-02-11 72 views
1

因此,我在此查詢此查詢,但無法弄清楚如何更改行爲。基本上它應該從應用程序表中返回一組結果,支付表的總付款與相應的ID以及費用表中的總費用和相應的ID。當有一筆支付一筆費用時,它是完美的。但是,如果有兩項費用,支付額似乎會增加一倍。我假設如果有3個費用,它會增加三倍,等等。左連接,其中有2個結果在一張表中,將相應表格的結果總和加倍。

我試着做總和(不同payments.amount)作爲付款,但問題是,它是完全可能的,相同數量。我不確定是否有可能喜歡,做一個總和的地方有一個與數額相對應的獨特ID ..我仍然在學習SQL。

select applications.*, 
permits.title as permit, 
sum(payments.amount) as payments, 
sum(fees.unitprice) as fees 
from applications 
left join permits on applications.permitid=permits.id 
left join payments on payments.appid=applications.id 
left join fees on fees.appid=applications.id 
where applications.deleted=0 
and payments.deleted=0 
and fees.deleted=0 
and fees.unitPrice > 0 
and applicationdate between '1975-1-1' and '2011-2-10' 
group by applications.id 
order by permits.deptid,permits.title,status,dateissued,applicationdate 

任何幫助將不勝感激 - 我一直在試圖解決這個問題好幾個小時!爲了弄清楚是什麼導致了它,我帶了幾個。

回答

1

您可以在派生表中進行聚合並加入到該表中。

... join (SELECT fees.appid, sum(fees.unitprice) as fees 
        FROM fees 
        WHERE fees.deleted = 0 
         and fees.unitPrice > 0 
        GROUP BY fees.appid) aggregatedfees 
     on aggregatedfees.appid = applications.id 
... 

順便說一句:所有你的左連接都被你的where子句轉換爲內連接。

+0

太棒了!謝謝。我也對付款表做了同樣的處理,所以我有兩個子查詢正在進行。效果很好,甚至不慢。上次我嘗試做一個子查詢時,我犯了一個錯誤,試圖執行一個WHERE payments.appid = applications.id,但那不起作用,所以我放棄了。我必須記住現在如何做到這一點。再次感謝! – 2011-02-11 17:07:24

相關問題