我正在处理三张 table 。
我试图在单个查询中获取结果,该查询将从 AccountingLine 表中返回 ALL ROWS,并将预算和实际表中每个 AccountingLine 的金额求和。
使用下面的 SQL,SUM 不适用于预算或实际数据。如果我删除一个连接和一个 SUM 函数,那么它会正确计算单个连接表。很奇怪……有人在 MySQL 中的三个或更多表上使用多个 SUM 函数遇到过这个问题吗?
SELECT A.*, SUM(B.`amount`) AS BudgetAmount, SUM(ACT.`amount`) as ActualAmount
FROM accounting_line A
LEFT JOIN budget B ON B.accounting_line_id = A.accounting_line_id
LEFT JOIN actual ACT ON ACT.accounting_line_id = A.accounting_line_id
GROUP BY A.`accounting_line_id`
通过发布上面的语句,我希望看到accounting_line 字段、每个accounting_line 的预算金额的总和以及每个accounting_line 的实际金额的总和。
我找遍了,找不到多个 SUM 函数的实例。非常感谢您的任何建议。
乔希
表数据如下:
Table: AccountingLine
act_line_id department
----------------------------------
1 Sales
2 HumanResources
Table: Budget
budget_id actg_line_id amount
----------------------------------------------
1 1 3500.00
2 2 5000.00
3 2 15000.00
Table: Actual
actual_id actg_line_id amount
----------------------------------------------
1 1 1000.00
2 2 500.00
3 2 9000.00
最佳答案
join
重复另一个表中的每个匹配行。因此,如果您在三个表中有 3 行并将它们连接在一起,则最终会得到 9 行。如果求和,则第二个和第三个表中的每个总和都高出 3 倍。
一种解决方案是在子查询中求和,以便 join
只找到一行:
SELECT A.*
, B.SumAmount as BudgetAmount
, ACT.SumAmount as ActualAmount
FROM accounting_line A
LEFT JOIN
(
select accounting_line_id
, sum(amount) as SumAmount
from budget
group by
accounting_line_id
) as B
ON B.accounting_line_id = A.accounting_line_id
LEFT JOIN
(
select accounting_line_id
, sum(amount) as SumAmount
from actual
group by
accounting_line_id
) as ACT
ON ACT.accounting_line_id = A.accounting_line_id
关于mysql - 3 表加入 SUM 和 GROUP BY 不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12337037/