我有以下两个表,我想找出"一月"月份的表 1 和表 2 之间的差异。差额应为表1中1月份所有值的总和减去表2中1月份所有值的总和。
答案应该是 300 (800 - 500(,但我的查询一直给我值"600"。
我的查询是:
SELECT
a.month,
(SUM(a.cost2)) - (SUM(b.cost2)) AS difference
FROM
Table1 a
LEFT JOIN
Table2 b ON a.Month = b.Month
WHERE
a.month = 'January'
GROUP BY
a.month
表1
Month Cost2
--------------
January 500
February 400
March 300
April 600
January 300
March 200
March 400
April 200
表2
Month Cost2
--------------
January 200
February 250
March 195
April 700
January 300
February 200
March 400
April 200
一种方法是先聚合,然后再聚合join
:
select a.month, (a_cost2 - b_cost2) as difference
from (select month, sum(a.cost2) as a_cost2
from Table1 a
where a.month = 'January'
group by month
) a left join
(select b.month, sum(b.cost2) as b_cost2
from Table2 b
where b.month = 'January'
group by month
) b
on a.Month = b.Month;
问题是您要对与 A 中的"一月"匹配的每一行对值求和一次。这会导致两个值加倍,并为您提供双倍的差异。
若要解决此问题,必须单独计算 SUMmed 值。这是一种方法:
select 'January'
(SELECT sum(cost2) from Table1 where [month]='January') -
(SELECT sum(cost2) from Table2 where month='January') as difference