我有两张表,输入和输出。
具有列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/

10-11 20:22
查看更多