【问题标题】:sum all rows with join用连接对所有行求和
【发布时间】:2012-03-29 07:43:18
【问题描述】:

如何通过连接对查询中的所有行求和?

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

【问题讨论】:

  • 请查看我的更新答案。我会放弃连接并改用子选择。
  • 你的更新是答案吗?如果是这样,它应该作为答案发布,而不是对问题的更新。

标签: mysql join group-by


【解决方案1】:

只需在SUM()-function 中添加两个值:

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

【讨论】:

  • 好的,但是如果您对每个accounting.id 有多个联接,这是否也有效?
猜你喜欢
  • 2022-07-30
  • 2017-08-02
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 2019-09-03
相关资源
最近更新 更多