2012-03-29 10 views
1

どのようにして結合内のすべての行を合計するか?ちょうど追加すべての行を結合で合計する

SELECT SUM(accounting.amount) AS sum, SUM(balance_invoice.amount) AS sum_balance 
FROM accounting 
LEFT JOIN balance_invoice ON balance_invoice.accounting_id=accounting.id 

Iは各accounting.id

更新

SELECT SUM(accounting.currency_amount*-1 + (
    SELECT SUM(balance_invoice_accounting.currency_amountoff) 
    FROM balance_invoice_accounting 
    WHERE balance_invoice_accounting.accounting_id=accounting.id 
)) AS sum 
FROM accounting 
+0

を私の更新の答えを参照してください。私は、結合を削除し、代わりにsubselectを使用します。 – oezi

+0

あなたの更新は答えですか?そうであれば、それは質問としての更新ではなく、回答として掲示されるべきです。 – yoozer8

答えて

1

に接合することができるaccounting.amountの総和とbalance_invoice.amount

複数の行と1行のみを戻すために、このクエリを必要としますSUM()の内部の両方の値 - 機能:

SELECT SUM(accounting.amount + balance_invoice.amount) AS sum_all 
FROM accounting 
LEFT JOIN balance_invoice ON balance_invoice.accounting_id=accounting.id 

いずれかの列がNULLすることができた場合、あなたは追加のCOALESCE()を追加する必要があります:

SELECT 
SUM(COALESCE(accounting.amount,0) + COALESCE(balance_invoice.amount,0) AS sum_all 
FROM accounting 
LEFT JOIN balance_invoice ON balance_invoice.accounting_id=accounting.id 

EDIT:
私は重要な部分という逃したすみません。あなたがそれに接合された複数のbalance_invoice.amountがあることができながら、一度だけ、すべてのaccounting.amountをカウントしたい場合、私はこのような副選択を使用したい:

SELECT 
    a.id, 
    (
    a.amount 
    + 
    (SELECT SUM(b.amount) FROM balance_invoice b WHERE b.accounting_id = a.id) 
) AS sum_all 
FROM 
    accounting a 
+0

okですが、accounting.idごとに複数の結合がある場合は、これも機能しますか? – clarkk

+0

私の質問が更新されました..クエリは0を返します – clarkk

関連する問題