Sql 查找两个选择的结果的差异
我有两张桌子:Sql 查找两个选择的结果的差异,sql,Sql,我有两张桌子: table_1: A | B | C z | x | 12 z | c | 13 z | c | 10 a | s | 14 a | d | 11 table_2: A | B | C z | c | 10 z | x | 15 z | x | 11 a | d | 14 a | s | 12 我想: -将表格按A和B分组 -求出AB的C和的差 我从以下几点开始: SELECT A, B, SUM(C) from tab
table_1:
A | B | C
z | x | 12
z | c | 13
z | c | 10
a | s | 14
a | d | 11
table_2:
A | B | C
z | c | 10
z | x | 15
z | x | 11
a | d | 14
a | s | 12
我想:-将表格按A和B分组
-求出AB的C和的差 我从以下几点开始:
SELECT A, B, SUM(C) from table_1 GROUP BY A, B;
SELECT A, B, SUM(C) from table_2 GROUP BY A, B;
但我不知道如何通过添加相等的附加列来连接它们
至表1.总和(C)-表2.总和(C)
预期结果如下:
A | B | sum1 | sum2 | diff
z | x | 12 | 26 | -14
z | c | 23 | 10 | 13
a | s | 14 | 12 | 2
a | d | 11 | 14 | -3
将联接与子查询一起使用
select X.A,X.B, sum1, sum2, sum1-sum2 as diff from
(
SELECT A, B, SUM(C) sum1
from table_1 GROUP BY A, B
)X inner join
(
SELECT A, B, SUM(C) sum2
from table_2 GROUP BY A, B
)Y on X.A=Y.A and X.B=Y.B
当两个表中的组不相同时,您希望发生什么<代码>内部联接可能很危险,因为组将消失 如果要保留所有组,则有一种方法是
union all
/groupby
:
select a, b, sum(c1) as sum1, sum(c2) as sum2,
(sum(c2) - sum(c1)) as diff
from ((select a, b, c as c1, 0 as c2
from table_1
) union all
(select a, b, 0 as c1, c as c2
from table_2
)
) t
group by a, b
同时指定预期结果(具有该表数据)