![](/img/trans.png)
[英]Sum one table and update other with result, or just do `sum` on select?
[英]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.