我有两张表,输入和输出。
具有列ID、productName、QTY、buyPrice、sellPrice的输入表。
具有列ID、产品名称、数量的输出表。
两者都可以有多个具有相同产品名称和不同(或相同)数量的输入。
输出不能有未首先出现在输入表中的产品名称。
我试图查询这两个表并得到最终结果-如下所示:
产品名称,输入表的总和(数量)(按产品名称分组),产品名称,输出表的总和(数量)(按产品名称分组)
例子:
输入
ID | productName | QTY | buyPrice | sellPrice
1 | dress 007 | 2 | 700 | 1400
2 | shirt 001 | 4 | 800 | 1900
3 | dress 007 | 10 | 700 | 1500
4 | dress 007 | 6 | 900 | 2900
5 | shirt 001 | 2 | 750 | 1600
6 | hat 008 | 2 | 300 | 600
输出
ID | productName | QTY
1 | dress 007 | 4
2 | shirt 001 | 2
3 | dress 007 | 1
4 | dress 007 | 1
5 | shirt 001 | 3
结果应该是
productName | SUM(QTY)INPUT | productName | SUM(QTY)OUTPUT
dress 007 | 18 | dress 007 | 6
shirt 001 | 6 | shirt 001 | 5
hat 008 | 2 | null | null
当只有一个表时,很容易进行求和和和分组,但是当我尝试同时左键联接两个表并按产品名称分组时,我得到的求和值是错误的。我错在哪里了?
简单部分:
SELECT a.productName , SUM(a.QTY), a.buyPrice , a.sellPrice
FROM input a
GROUP BY a.productName
错误:
SELECT a.productName , SUM(a.QTY), b.productName , SUM(b.QTY)
FROM input a LEFT JOIN output b
ON a.productName = b.productName
GROUP BY a.productName
最佳答案
您可以使用union all
:
SELECT IF(sum(input) , productName, null) productName, sum(input) input,
IF(sum(output), productName, null) productName, sum(output) output
FROM (
SELECT productName, QTY input, null output
FROM input
UNION ALL
SELECT productName, null, QTY
FROM output
) as sub
GROUP BY productName
sqlfiddle
这甚至可以在产品有输出但没有输入的情况下工作。当数据涉及一个月内的交易时,这种情况可能会发生,比如说,一个月初已经有一只股票。
关于mysql - 两个表SUM,GROUP的左联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54272070/