суммировать все строки с объединением - PullRequest
1 голос
/ 29 марта 2012

Как сложить все строки в запросе с объединением?

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

1 Ответ

1 голос
/ 29 марта 2012

просто добавьте оба значения внутри 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
...