SQL总和计算混淆

时间:2018-03-24 03:41:11

标签: mysql sql

我是mysql的新手并且正在努力更改商店应用程序以使其拥有两个库存。我创建了一个存储库存数量的表:

enter image description here

然后我计划创建一个包含库存数量,每个商店,每个SKU的视图。我使用以下查询:

SELECT 
    `stockList`.`sku`, 
    SUM(A.`stockQty`) AS 'store1', 
    SUM(B.`stockQty`) AS 'store2', 
    SUM(`stockList`.`stockQty`) AS 'total' 
FROM `stockList` 
LEFT JOIN (
    SELECT * FROM `stockList` WHERE `idStock`=1
) AS A 
ON `stockList`.`sku`=A.`sku` 
LEFT JOIN (
    SELECT * FROM `stockList` WHERE `idStock`=2
) AS B 
ON `stockList`.`sku`=B.`sku` 
GROUP BY `stockList`.`sku`

每个结果表,计算不正确,我无法识别逻辑:

enter image description here

SKU 43应该显示store1 = 9而store2 = 10,total = 19.这是他们在我单独执行选择查询时显示的内容。如果我误解了这个和逻辑是如何运作的,请告诉我。

2 个答案:

答案 0 :(得分:2)

您可以在子查询上使用firstNotificationTime.setDate(firstNotificationTime.getDate()); 来计算SUM

的Totle价格

sku可能会导致某些字段不匹配导致LEFT JOIN,因此请使用IFNULL预设值NULL

你可以试试这个。

0

sqlfiddle

答案 1 :(得分:1)

您的查询要复杂得多。你可以这样做:

SELECT 
  sku,
  SUM(stockQty) as total,
  SUM(IF(idStock=1,stockQty,0)) AS `store1`,
  SUM(IF(idStock=2,stockQty,0)) AS `store2`
FROM `stockList`
GROUP BY sku

输出:

sku     total   store1  store2
36      10      10      0
37      3       3       0
38      4       4       0
39      3       3       0
40      10      10      0
41      12      12      0
42      12      12      0
43      19      9       10