我以前找到了解决问题的方法,但不幸的是我丢失了硬盘驱动器上的文件,而且找不到我设法产生的语句。
我有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/