我以前找到了解决问题的方法,但不幸的是我丢失了硬盘驱动器上的文件,而且找不到我设法产生的语句。

我有2个表T2REQ和T2STOCK,都具有2列(typeID和数量),而我的问题在于,我在两个表中都可能多次出现SAME typeID。

我想做的是将SUM(QUANTITY)按typeID分组,然后从T2REQ中减去T2STOCK的值,但是由于我在两个表中都多次出现相同typeID的事件,因此我得到的SUM乘以typeID的出现次数。

这是T2REQ的样本(例如,以typeID 11399为例):

typeID      quantity
----------  ----------
34          102900
35          10500
36          3220
37          840
11399       700
563         140
9848        140
11486       28
11688       700
11399       390
4393        130
9840        390
9842        390
11399       390
11483       19.5
11541       780


这是T2STOCK表的示例:

typeID      quantity
----------  ----------
9842        1921
9848        2400
11399       1700
11475       165
11476       27
11478       28
11481       34
11483       122
11476       2


这就是我现在所处的位置,我知道SUM(t2stock.quantity)由于JOIN 1 = 1而受到影响(成倍增加),但是无论我尝试了什么,我都没有以正确的顺序进行操作:

        SELECT
           t2req.typeID, sum(t2req.quantity), sum(t2stock.quantity),
           sum(t2req.quantity) - sum(t2stock.quantity) as diff
        FROM t2req JOIN t2stock ON t2req.typeID = t2stock.typeID
        GROUP BY t2req.typeID
        ORDER BY diff DESC;

typeID      sum(t2req.quantity)  sum(t2stock.quantity)  diff
----------  -------------------  ---------------------  ----------
563         140                  30                     110
11541       780                  780                    0
11486       28                   40                     -12
11483       19.5                 122                    -102.5
9840        390                  1000                   -610
40          260                  940                    -680
9842        390                  1921                   -1531
9848        140                  2400                   -2260
11399       1480                 5100                   -3620
39          650                  7650                   -7000
37          1230                 116336                 -115106
36          28570                967098                 -938528
35          33770                2477820                -2444050
34          102900               2798355                -2695455


您可以看到类型ID 11399的SUM(t2req)是正确的:1480

您会看到类型ID 11399的SUM(t2stock)不正确:5100而不是1700(5100除以3,即t2req中的出现次数)

避免乘法的最佳方法是什么(由于两个typeIDs(在两个表中)),并且我的总和减去了JOIN?

对不起,我只想尽我所能,因为英语不是我的母语。
非常感谢你的帮助。

最佳答案

您可以在加入之前进行汇总:

SELECT
   t2req.typeID,
   t2req.quantity,
   t2stock.quantity,
   t2req.quantity - t2stock.quantity as diff
FROM
    (SELECT TypeID, SUM(Quantity) Quantity FROM t2req GROUP BY TypeID) t2req JOIN
    (SELECT TypeID, SUM(Quantity) Quantity FROM t2stock GROUP BY TypeID) t2stock
        ON t2req.typeID = t2stock.typeID
ORDER BY diff DESC;


小提琴样本:http://sqlfiddle.com/#!7/06711/5

关于sql - Sqlite用JOIN和重复项减去和(与group by),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19928235/

10-12 21:25