2012-03-29 3 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 

나는 각 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

여러 행이 한 행을 반환하는이 질의를 필요로한다 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 

편집 :
나는 중요한 부분을 놓친 죄송합니다. 당신이 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

각 accounting.id에 여러 개의 조인이있는 경우에도이 작업이 가능합니까? – clarkk

+0

내 질문 업데이트 .. 쿼리 반환 0 – clarkk