[英]Subtract two columns from two tables with Group By
我有4张桌子。
CREATE TABLE Branch(
ID INT,
Name VARCHAR(50)
);
INSERT INTO Branch VALUES
(1,'A'), (2,'B');
CREATE TABLE Product(
ID INT,
Name VARCHAR(50)
);
INSERT INTO Product VALUES
(1,'X'), (2,'Y');
CREATE TABLE StockIn(
ID INT,
ProductId INT,
Quantity INT,
BranchId INT
);
INSERT INTO StockIn VALUES
(1,1,10,1),
(2,1,20,1),
(3,1,50,2),
(4,1,10,2);
CREATE TABLE StockOut(
ID INT,
ProductId INT,
Quantity INT,
BranchId INT
);
INSERT INTO StockOut VALUES
(1,1,5,1),
(2,1,21,1),
(3,1,45,2),
(4,1,5,2);
现在我想从这些(StockIn-StockOut)计算股票。
通过使用下面的查询我通过分组他们的分支从库存表获得stockin和stockout。
StockIn
select BranchId, ifnull(sum(Quantity),0) Quantity from stockin where productid=1 group by BranchId;
脱销
select BranchId, ifnull(sum(Quantity),0) Quantity from stockout where productid=1 group by BranchId;
我想像这样显示结果
请尝试以下查询:
SELECT derived_t.BranchId,
SUM(derived_t.factor * derived_t.quantity) AS Quantity
FROM
(
select BranchId,
ifnull(sum(Quantity),0) as quantity,
1 as factor
from stockin
where productid=1
group by BranchId
UNION ALL
select BranchId,
ifnull(sum(Quantity),0) Quantity,
-1 as factor
from stockout
where productid=1
group by BranchId
) AS derived_t
GROUP BY derived_t.BranchId
使用stockin和stockout之间的左连接,这里你需要左连接,因为你可能有stockin但可能没有
离开加入你的2个quires
select t1.branchId, t1.quantity - coalesce(t2.quantity,0) result
from (
select BranchId, coalesce(sum(Quantity),0) Quantity
from stockin
where productid=1
group by BranchId
) t1 left join (
Select BranchId, coalesce(sum(Quantity),0) Quantity
from stockout
where productid=1
group by BranchId
) t2 on t1.BranchId = t2.BranchId
branchId result
1 4
2 10
您可以在两个查询之间使用连接
select a.branchId, a.quantity - ifnull(b.quantity,0) result
from (
select BranchId, ifnull(sum(Quantity),0) Quantity
from stockin
where productid=1
group by BranchId
) a left join (
Select BranchId, ifnull(sum(Quantity),0) Quantity
from stockout
where productid=1
group by BranchId
) b on a.BranchId = b.BranchId
select branchid, sum(quantity) total
from
(
select branchid,quantity from stockin
union all
select branchid, quantity*-1 from stockout
) x
group by branchid;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.