Как суммировать и вычитать, используя SQL? - PullRequest
22 голосов
/ 16 июля 2011

Я использую MySQL, и у меня есть две таблицы:

master_table

  • ORDERNO
  • ITEM
  • QTY

stock_bal

  • ПУНКТ
  • BAL_QTY

В основной таблице есть дубликаты ORDERNO и ITEM значений.Я получил всего QTY с использованием SQL 'GROUP BY'.

Мне нужно вычесть / вычесть BAL_QTY из суммы ITEM (master_table).Я получил значение SUM QTY с помощью запроса (на самом деле есть много строк).

Ответы [ 5 ]

33 голосов
/ 16 июля 2011

Я думаю, это то, что вы ищете.NEW_BAL - это сумма QTY s, вычтенная из баланса:

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
2 голосов
/ 16 июля 2011

Я не совсем уверен, что вы хотите, но я думаю, что это в духе:

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
0 голосов
/ 08 июня 2019

Пример вычитания приведен ниже:

Select value1 - (select value2 from AnyTable1) from AnyTable2

value1 & value2 может быть числом, суммой, средним значением и т. Д. Но значения должны быть совместимы

0 голосов
/ 30 июля 2015

Я попробовал эту технику.Умножьте вычитание из данных на (-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
0 голосов
/ 16 июля 2011

ах домашнее задание ...

Итак, подождите, вам нужно вычесть остаток товаров на складе из общего количества тех товаров, которые были заказаны?Я должен сказать вам, что это звучит немного задом наперед.Вообще я думаю, что люди делают это наоборот.Вычтите общее количество предметов, заказанных с баланса.

Если вам действительно нужно это сделать, хотя ... Предполагая, что ПУНКТ уникален в 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
...