我有以下两个表,我想找出“ 1月”月份表1和表2之间的差异。差异应为表1中一月的所有值的总和减去表2中一月的所有值的总和。
答案应该是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中与'January'相匹配的每一行,对这些值求和一次。这导致两个值都加倍,并且差值加倍。
要变通解决此问题,您必须分别计算SUMmed值。这是一种方法:
select 'January'
(SELECT sum(cost2) from Table1 where [month]='January') -
(SELECT sum(cost2) from Table2 where month='January') as difference