mysql 每次销售中每个唯一 ID 的累计金额:

mysql Cumulative sum for each unique ID in each sale:

我在添加和累积每个 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 ?

您可以使用包含 window 分析函数的 SELECT 语句代替 UPDATE 语句:

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

acumulado 列不需要存储在 table 作为 computable 列中。

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

UPDATE :根据上次编辑考虑使用

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

instead of SUM(quantity) OVER (ORDER BY id) AS acumulado

通过添加PARTITION BY product_id来区分按product_id

分组的总和

Demo3