Как SUM и SUBTRACT использовать SQL?
Я использую MySQL, и у меня есть две таблицы:
master_table
stock_bal
Основная таблица имеет повторяющиеся значения ORDERNO
и ITEM
. Я получил итоговое значение QTY
, используя предложение SQL GROUP BY.
Мне нужно вычесть/вычесть BAL_QTY
из SUM ITEM
(master_table). У меня есть значение SUM QTY
с использованием запроса (на самом деле много строк).
Ответы
Ответ 1
Я думаю, что это то, что вы ищете. NEW_BAL
представляет собой сумму QTY
, вычитаемую из баланса:
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
Я не уверен точно, что вы хотите, но я думаю, что это по строкам:
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
Ответ 3
ah домашнее задание...
Итак, подождите, вам нужно вычесть остаток предметов на складе из общего количества тех предметов, которые были заказаны? Я должен сказать вам, что звучит немного назад. Обычно я думаю, что люди делают это наоборот. Вычитайте общее количество предметов, заказанных с баланса.
Если вам действительно нужно это сделать...
Предполагая, что ITEM уникален в share_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
Ответ 4
Я пробовал такую технику. Умножьте вычитание из данных на (-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
Ответ 5
Пример для вычитания приведен ниже:
Select value1 - (select value2 from AnyTable1) from AnyTable2
значение1 и значение2 могут быть числом, суммой, средним значением и т.д. Но значения должны быть совместимы
Ответ 6
Простая копия & вставить пример с подзапросами,
Обратите внимание, что оба запроса должны возвращать 1 строку:
select
(select sum(items_1) from items_table_1 where ...)
-
(select count(items_2) from items_table_1 where ...)
as difference