首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算手头上每批的数量(mysql)

如何计算手头上每批的数量(mysql)
EN

Stack Overflow用户
提问于 2020-03-30 13:30:32
回答 3查看 838关注 0票数 0

这是事务明细表

我正在尝试设计一个Mysql库存数据库。我认为每个type: 1行都是一个产品批次(批次)。

对于每个事务,type列都有用于IN的1和用于OUT的0detail_id正在引用id列。

我怎样才能得到这个结果:

代码语言:javascript
运行
复制
 id   item  sum(quantity)
  1     1         3            [10-(5+2)]
  4     1         0            (5-5)
  6     2         20            20
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-30 13:56:11

你可以用这个:

代码语言:javascript
运行
复制
SELECT 
  lots.id,
  MIN(lots.item) AS item,
  MIN(lots.quantity) - IFNULL(SUM(details.quantity), 0) AS quantity 
FROM (
  SELECT id, item, quantity 
  FROM details
  WHERE type = 1
) lots LEFT JOIN details ON lots.id = details.detail_id 
GROUP BY lots.id
ORDER BY lots.id

基于dbfiddle.uk的演示

票数 0
EN

Stack Overflow用户

发布于 2020-03-30 13:53:00

代码语言:javascript
运行
复制
WITH cte AS (
  SELECT *, 
         SUM(detail_id IS NULL) OVER (PARTITION BY item ORDER BY id) group_num 
  FROM details
)
SELECT MIN(id) id,
       item,
       SUM( CASE type WHEN 1 THEN quantity 
                      WHEN 0 THEN -quantity 
                      END ) `sum(quantity)`
FROM cte
GROUP BY item, group_num;

小提琴

票数 1
EN

Stack Overflow用户

发布于 2020-03-30 14:02:56

我修改了你的小提琴。我确实将一件事更改为您现有的表--您需要指定detail_id (无论它是空的),这样我们就可以对结果进行分组。

最后的查询将类似于

代码语言:javascript
运行
复制
select detail_id, item, 
(in_sum - out_sum) as `sum(quantity)` from
(SELECT
detail_id,
item,
sum(case when type=1 then quantity else 0 end) as in_sum,
sum(case when type=0 then quantity else 0 end) as out_sum
FROM details
group by detail_id, item) tab

首先通过对detail_id、item进行分组,得到指定类型的数量之和,然后使用该结果计算最终输出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60931665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档