Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找两个选择的结果的差异_Sql - Fatal编程技术网

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

同时指定预期结果(具有该表数据)