[英]mysql subtract one select query from another select query value
我有兩個mysql表,並且已經建立了使用這兩個表選擇查詢的方法,兩個查詢輸出都是來自stock_transfer_details表的數量的總和。 我需要從“ total_from”中減去“ total_to”。 請檢查以下是mysql表。
以下是我的兩個查詢。
第一個查詢:
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查詢?
您可以組合這些查詢並獲得差異
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()
我想提供一個更廣義的回答了這個問題:任何減去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
將被當前用於計算總和的兩個查詢替換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.