mysql – 使用Group By从两个表中减去两列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 使用Group By从两个表中减去两列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1417字,纯文字阅读大概需要3分钟。
内容图文
![mysql – 使用Group By从两个表中减去两列](/upload/InfoBanner/zyjiaocheng/907/95bdaecae0d1413b92f8af38ad494012.jpg)
我有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;
我想像这样显示结果
解决方法:
>对于每个单独的选择查询结果,获取一个附加字段,即因子.对于库存,其值为1,对于库存,其值为-1.
>使用Union All组合单个选择查询的结果,并将结果集用作Derived Table.
>现在,在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
内容总结
以上是互联网集市为您收集整理的mysql – 使用Group By从两个表中减去两列全部内容,希望文章能够帮你解决mysql – 使用Group By从两个表中减去两列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。