【问题标题】:difference of sums of two different tables in sqlsql中两个不同表的总和之差
【发布时间】:2013-09-14 18:52:23
【问题描述】:

我有两个sql表,purchase和sent,我想知道任意日期的项目未结余额。为此,我尝试使用sum(puchase.quantity) - sum(sent.quantity) where date<some date。我可以有单独的查询,但我不知道如何组合它们。

以下是个别查询:

select item,sum(quantity) from sent where datee <'some date' group by item
select item,sum(quantity) from purchase where datee<'some date' group by item

请告诉我是否有更好的方法来获得未结余额。

提前致谢。

【问题讨论】:

    标签: mysql sql join left-join right-join


    【解决方案1】:

    我想你想要这个

    这是工作演示SQLFiddle

    CREATE TABLE sent
    (
    item int,
    quantity int
    );
    
    CREATE TABLE purchase
    (
    item int,
    quantity int
    );
    
    insert into sent values(1,4);
    insert into sent values(2,7);
    insert into sent values(3,9);
    insert into sent values(4,5);
    insert into sent values(5,9);
    
    insert into purchase values(1,2);
    insert into purchase values(2,5);
    insert into purchase values(3,3);
    insert into purchase values(4,2);
    insert into purchase values(5,7);
    
    
    select sent.item , (sum(IFNULL(sent.quantity,0)) - sum(IFNULL(purchase.quantity,0))) as diff 
    FROM sent  , purchase Where sent.item = purchase.item group by sent.item
    

    【讨论】:

    • 我会写一个类似的解决方案。如果您将使用外连接而不是笛卡尔乘法,那么我会支持您的答案。
    • 如果我们不止一次购买一件物品,这将不起作用......例如,在我的情况下,我购买了一件物品三次,而不是正确答案 18,查询给了我 54 。 .
    • 好的,@AliHaider,那么请创建一个查询,其中您的求和查询是子查询,结果关系被命名为 t1 和 t2。使用项目上的连接条件加入他们,它应该可以工作。
    • @LajosArpad,我在 sql 方面真的很弱,你能告诉我查询吗?这会很有帮助。
    • 不是真的,因为我没有时间测试它,如果有错别字我会投反对票。
    【解决方案2】:

    也许有一种更简洁的方法可以得到你想要的,但以下应该会给你正确的结果:

    SELECT s.item, 
            s.qty as total_sent, 
            COALESCE(p.qty,0) as total_purchase, 
            s.qty - COALESCE(p.qty,0) as stock
    FROM 
    (
      SELECT item, sum(quantity) as qty
      FROM sent 
      GROUP BY item
    ) s
    LEFT JOIN 
    (
      SELECT item, sum(quantity) as qty
      FROM purchase
      GROUP BY item
    ) p
    ON p.item = s.item
    

    【讨论】:

    • @AliHaider。没问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    相关资源
    最近更新 更多