gpt4 book ai didi

mysql - 仅在一张表中求和 - Mysql

转载 作者:行者123 更新时间:2023-11-29 10:24:13 25 4
gpt4 key购买 nike

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

在表格中我有产品(代码、描述)。

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

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

我的查询:

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。

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

表库存移动:​​

| 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 |

 

库存:

|代码 |描述 |

| 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 并获得相同的结果。但实际上,您可能需要一个处理多种产品的解决方案。

关于mysql - 仅在一张表中求和 - Mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48599321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com