mysql每次销售中每个唯一ID的累积总和:

时间:2020-02-05 19:11:00

标签: mysql sql sql-update mysql-8.0

我很难添加和累积每个ID的金额, 我使用了此解决方案,但它不起作用,它会加总所有ID,

id     product_id  quantity  acumulado
168    190         1         1
169    190         3         4
170    195         1         5
171    190         25.60     30.60
172    190         1         31.60

我使用这个:

SET @csum := 0;

UPDATE sma_sale_items
   SET acumulado = (@csum := @csum + quantity)
 ORDER BY id, product_id;

有什么解决办法吗?吃了这个

id     product_id  quantity  acumulado
168    190         1         1
169    190         3         4
170    195         1         1
171    190         25.60     29.60
172    190         1         30.60

对于5.7版?

1 个答案:

答案 0 :(得分:1)

您可以使用包含窗口分析功能的SELECT语句代替UPDATE语句:

SELECT id, product_id, quantity, SUM(quantity) OVER (ORDER BY id) AS acumulado
  FROM sma_sale_items

acumulado列不需要存储在可计算列的表中。

Demo1

如果您仍然喜欢UPDATE,请使用:

UPDATE sma_sale_items s1
 JOIN (
      SELECT id, product_id, SUM(quantity) OVER (ORDER BY id) AS acumulado
        FROM sma_sale_items
       ORDER BY id
      ) s2 ON s1.ID=s2.ID
  SET s1.acumulado = s2.acumulado;

Demo2

更新:根据上一次编辑,考虑使用

SUM(quantity) OVER (PARTITION BY product_id ORDER BY id) AS acumulado

代替 SUM(quantity) OVER (ORDER BY id) AS acumulado

通过添加PARTITION BY product_id来区分由product_id分组的总和

Demo3