【问题标题】:How to SUM and SUBTRACT using SQL?如何使用 SQL 求和和减法?
【发布时间】:2011-10-06 14:29:52
【问题描述】:

我正在使用 MySQL,我有两个表:

master_table

  • 订单号
  • 项目
  • 数量

stock_bal

  • 项目
  • BAL_QTY

主表有重复的ORDERNOITEM 值。我使用 SQL 'GROUP BY' 子句得到了总计 QTY

我需要从 ITEM (master_table) 的 SUM 中减去/减去 BAL_QTY。我使用查询得到了 SUM QTY 值(实际上有很多行)。

【问题讨论】:

    标签: mysql sql aggregate-functions


    【解决方案1】:

    我想这就是你要找的。 NEW_BAL 是从余额中减去QTYs 的总和:

    SELECT   master_table.ORDERNO,
             master_table.ITEM,
             SUM(master_table.QTY),
             stock_bal.BAL_QTY,
             (stock_bal.BAL_QTY - SUM(master_table.QTY)) AS NEW_BAL
    FROM     master_table INNER JOIN
             stock_bal ON master_bal.ITEM = stock_bal.ITEM
    GROUP BY master_table.ORDERNO,
             master_table.ITEM
    

    如果您想使用新余额更新项目余额,请使用以下内容:

    UPDATE stock_bal
    SET    BAL_QTY = BAL_QTY - (SELECT   SUM(QTY)
                                FROM     master_table
                                GROUP BY master_table.ORDERNO,
                                         master_table.ITEM)
    

    这假设您向后发布减法;它会从余额中减去订单中的数量,这在不了解您的表格的情况下最有意义。如果我错了,只需交换这两个即可更改它:

    (SUM(master_table.QTY) - stock_bal.BAL_QTY) AS NEW_BAL
    

    【讨论】:

    • 这非常有用并且工作正常,非常感谢.. 我还需要更新主表 QTY 值。这个值来自很多行......我该怎么做......
    【解决方案2】:

    下面给出一个减法的例子:

    Select value1 - (select value2 from AnyTable1) from AnyTable2
    

    value1 & value2 可以是计数、求和、平均输出等。但值应该兼容

    【讨论】:

      【解决方案3】:

      带有子查询的简单复制和粘贴示例, 请注意,两个查询都应返回 1 行:

      select
      (select sum(items_1) from items_table_1 where ...)
      -
      (select count(items_2) from items_table_1 where ...) 
      
      as difference
      

      【讨论】:

        【解决方案4】:

        我不确定您到底想要什么,但我认为大致如下:

        SELECT `Item`, `qty`-`BAL_QTY` as `qty` FROM ((SELECT Item, SUM(`QTY`) as qty FROM `master_table` GROUP BY `ITEM`) as A NATURAL JOIN `stock_table`) as B
        

        【讨论】:

          【解决方案5】:

          啊作业...

          等等,您需要从已订购的商品总数中扣除库存商品的余额吗?我必须告诉你,这听起来有点倒退。一般来说,我认为人们会反其道而行之。从余额中扣除订购的商品总数。

          如果你真的需要这样做...... 假设 ITEM 在 stock_bal 中是唯一的...

          SELECT s.ITEM, SUM(m.QTY) - s.QTY AS result
          FROM stock_bal s
          INNER JOIN master_table m ON m.ITEM = s.ITEM
          GROUP BY s.ITEM, s.QTY
          

          【讨论】:

            【解决方案6】:

            我已经尝试过这种技术。将数据中的减法乘以(-1),然后将两者相加(),然后您将得到减法。

            -- Loan Outstanding
                select  'Loan Outstanding' as Particular, sum(Unit), sum(UptoLastYear), sum(ThisYear), sum(UptoThisYear)
                from
                (
                    select 
                        sum(laod.dr) as Unit,
                        sum(if(lao.created_at <= '2014-01-01',laod.dr,0)) as UptoLastYear,
                        sum(if(lao.created_at between '2014-01-01' and '2015-07-14',laod.dr,0)) as ThisYear,
                        sum(if(lao.created_at <= '2015-07-14',laod.dr,0)) as UptoThisYear
                    from loan_account_opening as lao
                    inner join loan_account_opening_detail as laod on lao.id=laod.loan_account_opening_id
                    where lao.organization = 3
                    union
                    select
                        sum(lr.installment)*-1 as Unit,
                        sum(if(lr.created_at <= '2014-01-01',lr.installment,0))*-1 as UptoLastYear,
                        sum(if(lr.created_at between '2014-01-01' and '2015-07-14',lr.installment,0))*-1 as ThisYear,
                        sum(if(lr.created_at <= '2015-07-14',lr.installment,0))*-1 as UptoThisYear
                    from loan_recovery as lr
                    inner join loan_account_opening as lo on lr.loan_account_opening_id=lo.id
                    where lo.organization = 3
                ) as t3
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多