首页 > 解决方案 > 减去两个表的 Select(Sum) Group By

问题描述

我有 2 张桌子,stock_in 和 stock_out。要找出库存水平,我需要从 stock_in 中减去 stock_out。我不知道从哪里开始,我尝试了下面的查询,但它不起作用。我在下面创建了表格来展示我想要实现的目标。

SELECT (SELECT item, size, SUM(qty) AS qty FROM stock_in GROUP BY item, size) - (SELECT item, size, SUM(qty) AS qty FROM stock_out GROUP BY item, size)
stock_in table
|item   | size | qty |
|:------|:----:|----:|
|PhoneX | XL   |  2  |
|PhoneY | L    |  3  |
|PhoneZ | XL   |  2  | 
|PhoneX | XL   |  2  |

stock_out table
|item   | size | qty |
|:------|:----:|----:|
|PhoneX | XL   |  1  |
|PhoneY | L    |  2  |
|PhoneZ | XL   |  1  | 
|PhoneX | XL   |  2  |

result (avaliable stock)
|item   | size | qty |
|:------|:----:|----:|
|PhoneX | XL   |  1  |
|PhoneY | L    |  1  |
|PhoneZ | XL   |  1  |

标签: mysqlsql

解决方案


您的代码将无法正常工作,因为子查询可以返回多行——而这对于标量子查询是不允许的。

我会建议union all和聚合:

select item, size, sum(qty)
from ((select item, size, qty
       from stock_in
      ) union all
      (select item, size, - qty
       from stock_out
      )
     ) sio
group by item, size;

推荐阅读