簡體   English   中英

MySQL從另一個選擇查詢值中減去一個選擇查詢

[英]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;

在您的情況下,兩個子查詢ab將被當前用於計算總和的兩個查詢替換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM