减去两个SUM GROUP BY字段

时间:2016-02-08 22:47:14

标签: sql sqlite join sum

我有两张表itemOrdersitemUsage

itemOrders有两个字段:item_numberqty_ordered itemUsage有两个字段:item_numberqty_used

我试图说出我的SQL查询,以便总结两个表中每个项目编号的数量,然后从itemUsage

中减去itemOrders中的总数 到目前为止,我已经提出了这个问题:

SELECT itemOrders.item_number
    ,(
        SELECT sum(qty_ordered)
        FROM itemOrders
        GROUP BY itemOrders.item_number
        ) - (
        SELECT sum(qty_used)
        FROM itemUsage
        GROUP BY itemUsage.item_number
        ) AS item_total
FROM itemOrders
INNER JOIN itemUsage 
        ON itemOrders.item_number = itemUsage.item_number
GROUP BY itemOrders.item_number

这里发生的是所有字段都是0。

项目编号" A"显示在" A"的所有实例中订购的总数量为3在itemOrders表格中,只有在" A"的所有实例中使用的总数量为1。在itemUsage表中。 sql应该在" A"的1个实例旁边的item_total字段中显示第一个。在item_number字段中。

2 个答案:

答案 0 :(得分:1)

问题是您正在创建CARTESIAN PRODUCT并重复SUM上的值,只计算分隔的每个值,然后计算LEFT JOIN两者。如果未使用任何项目,COALESCE会将NULL转换为0

SELECT io_total.item_number,  
       order_total - COALESCE(used_total, 0) as item_total
FROM (SELECT io.item_number,  sum(io.qty_ordered) as order_total
      FROM itemOrders io
      GROUP BY io.item_number
     ) io_total
LEFT JOIN (SELECT iu.item_number, sum(iu.qty_used) as used_total 
           FROM itemUsage iu
           GROUP BY iu.item_number
          ) as iutotal
        ON io_total.item_number = iutotal.item_number

答案 1 :(得分:0)

好吧,看起来你正在制作三个查询,两个单独的查询,一个用于每个总和,另一个具有不使用的内连接。 尝试

Select itemOrders.item_number, sum(itemOrders.qty_ordered - itemUsage.qty_used) as item_total 
from itemOrders INNER JOIN itemUsage
On itemOrders.item_number = itemUsage.item_number
GROUP BY itemOrders.item_number