MySQL вычесть один запрос выбора из другого значения запроса выбора - PullRequest
0 голосов
/ 03 октября 2018

У меня есть две таблицы mysql, и у меня есть сборка, чтобы выбрать запрос с использованием этих двух таблиц. Вывод обоих запросов представляет собой суммирование количества из таблицы inventory_transfer_details.Мне нужно вычесть "total_to" из "total_from".Пожалуйста, проверьте ниже таблицы MySQL.

Inventory_transfer enter image description here

inventory_transfer_details enter image description here

ниже мои два запроса.

Первый запрос:

select sum(b.transfer_quantity) as total_to 
from inventory_transfers as a 
join inventory_transfer_details as b on a.id = b.inventory_transfer_id 
where a.status="approved" and b.inventory_or_composite_id = '1' and a.to_warehouse_id = '2'

Второй запрос:

select sum(b.transfer_quantity) as total_from 
from inventory_transfers as a 
join inventory_transfer_details as b on a.id = b.inventory_transfer_id 
where a.status="approved" and b.inventory_or_composite_id = '1' and a.from_warehouse_id = '2'

Мне нужно вычесть из запроса Transfer_to в Transfer_from

.руководство по преобразованию этого окончательного запроса в запрос laravel?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Я хотел бы дать более обобщенный ответ на эту проблему: вычесть любое SUM() из любого другого SUM().Вы можете просто сделать ...

SELECT Total1, Total2, Total1 - Total2
FROM
    (SELECT SUM(id) Total1 FROM TableA) AS a
INNER JOIN
    (SELECT SUM(id) Total2 FROM TableB) AS b;

В вашем случае два подзапроса, a и b, будут заменены двумя запросами, которые у вас есть для расчета сумм.

0 голосов
/ 03 октября 2018

Вы можете объединить эти запросы и получить разницу

SELECT
  sum(
    IF(a.to_warehouse_id = '2', b.transfer_quantity, 0)
  ) - sum(
    IF(a.from_warehouse_id = '2', b.transfer_quantity, 0)
  ) as total
FROM
  inventory_transfers AS a
  JOIN inventory_transfer_details AS b ON a.id = b.inventory_transfer_id
WHERE
  a.status = "approved"
  AND b.inventory_or_composite_id = '1'

В конструкторе запросов laravel этот запрос может выглядеть как

DB::table('inventory_transfers as a')
    ->select(DB::raw('sum(IF(a.to_warehouse_id = '2', b.transfer_quantity, 0)) - sum(IF(a.from_warehouse_id = '2', b.transfer_quantity, 0)) as total'))
    ->join('inventory_transfer_details as b', DB::raw('a.id'), '=', DB::raw('b.inventory_transfer_id'))
    ->where([
        ['a.status', '=', 'approved']
        ['b.inventory_or_composite_id', '=', 1]
    ])
    ->get()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...