sql - 减去两个 SUM GROUP BY 字段

标签 sql sqlite join sum

我有两张 table 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”显示 itemOrders 中“A”的所有实例中订购的总数量为 3表中,itemUsage 中“A”的所有实例中仅使用了 1 个总数量。 table 。 SQL 应在 item_number 字段中的 1 个“A”实例旁边显示 item_total 字段中的数字 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

关于sql - 减去两个 SUM GROUP BY 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35280836/

相关文章:

python - 将 Python 变量从一个函数传递到另一个函数,以将其与 SQL 数据库的变量进行比较

sql - 为什么在连接两个表时不能在同一个查询中使用表的别名和它的原始名称?

mysql - 连接 3 个表

mysql - 数据库设计最佳实践 – 调查问答

sql - Hive如何根据列值提取数据并写入本地文件

SQLITE 使用选择作为值插入多行

cakephp - 排除 CakePHP 中的 hasMany 模型

php - Mysql NOT ON语句

java - 使用 Hibernate 查找数据库大小

android - SQLite 在查询中跳过一个词