繁体   English   中英

仅在一张表中求和-MySQL

[英]SUM in just one table - Mysql

我有以下情况。 我正在建立一个库存控制系统,并通过它来控制产品的进出。

在一张桌子上,我有产品(代码,说明)。

在另一个表中,记录产品的移动(代码,product_code,[入,出]类型,数量,日期)。

当我尝试计算输入的内容时,输出的内容越少,它就不起作用。

我的查询:

SELECT SUM(s1.quantity) - SUM(s2.quantity)
FROM `stock_movement` AS s1
JOIN `stock_movement` AS s2 
ON s1.code_product = s2.code_product
WHERE s1.type = 'IN'
AND s2.type = 'OUT';

结果: 80

此处正确的结果应该是(40 + 20)-(10 + 10)= 40,但是此查询考虑的是所有输入的类型均为IN和OUT,因此结果为80。

有人知道我在做什么错吗? 下表数据如下:

表STOCK_MOVEMENT:

| CODE | CODE_PRODUCT | TYPE | QUANTITY | DATA |
| 1 | 30 | IN | 20 | 2018-01-20 |
| 2 | 30 | IN | 40 | 2018-02-03 |
| 3 | 30 | OUT | 10 | 2018-01-20 |
| 4 | 30 | OUT | 10 | 2018-02-03 |

表库存:

| CODE | 描述|

| 30 | TEST_PRODUCT |

您无需在此处自行加入,只需使用条件聚合即可:

SELECT
    CODE_PRODUCT,
    SUM(CASE WHEN TYPE = 'IN'  THEN QUANTITY ELSE 0 END) -
    SUM(CASE WHEN TYPE = 'OUT' THEN QUANTITY ELSE 0 END) AS diff
FROM stock_movement
GROUP BY CODE_PRODUCT;

请注意,我按产品进行汇总。 对于您的特定样本数据集,只有一种产品,因此我们可以删除GROUP BY并获得相同的结果。 但实际上,您可能需要一个可处理多种产品的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM