在mysql中聚合和计算值

h43kikqp  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(259)

我有一个包含一些传入和传出数据的表。

+====+===========+==========+============+
| id | flow(int) | quantity | product_id |
+====+===========+==========+============+
| 1  | 0         | 100      | 1          |
+----+-----------+----------+------------+
| 2  | 1         | 20       | 1          |
+----+-----------+----------+------------+
| 3  | 1         | 30       | 1          |
+----+-----------+----------+------------+
| 4  | 0         | 10       | 1          |
+----+-----------+----------+------------+
| 5  | 1         | 30       | 2          |
+----+-----------+----------+------------+
| 6  | 2         | 10       | 2          |
+----+-----------+----------+------------+
| 7  | 0         | 10       | 2          |
+====+===========+==========+============+

列流是一种枚举类型,0-传入,1和2-传出操作。
如何获得特定产品的当前“余额”?
产品1的“余额”应为60=输入(100)-输出(20)-输出(30)+输入(10)。
产品2应该有-30“余额”=输出(30)-输出(10)-输入(10)。
是否可以用任何有效的方式进行单一查询?

rks48beu

rks48beu1#

使用以下选项:

SELECT product_id,
       SUM( IF(flow IN ('1','2'), 
               -1*quantity, 
               quantity) ) AS balance
FROM table_name
GROUP BY product_id;
xe55xuns

xe55xuns2#

With incoming_product as(
   select product_id,sum(quantity) res
   from my_table
   where flow = 0
   group by product_id
),
outgoing_product as(
   select product_id,sum(quantity) res
   from my_table
   where flow <> 0
   group by product_id
)
select t1.product_id, t1.res - t2.res
from incoming_product t1,outgoing_product t2
where t1.product_id = t2.product_id;
csga3l58

csga3l583#

这将是条件聚合:

select product_id,
       sum(case when flow like 'out_%' then - quantity else quantity end) as net_quantity
from t
group by product_id;

相关问题