用连接加总所有行

问题描述:

如何用连接加总查询中的所有行?用连接加总所有行

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.amount总和和balance_invoice.amount

多行只返回一行可以连接到每个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

请参阅我的更新答案。我会放弃连接并使用子选择。 – oezi 2012-03-29 08:06:56

+0

是你的更新吗?如果是这样,它应该被发布为答案,而不是问题的更新。 – yoozer8 2012-04-05 15:25:34

只需添加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 

编辑:
我很抱歉,我错过了重要的作用。如果要统计每个accounting.amount只有一次,而可以有多个balance_invoice.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 2012-03-29 07:50:27

+0

已更新我的问题。查询返回0 – clarkk 2012-03-29 08:21:47