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 列中。
如果你还是喜欢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;
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
分组的总和
我在添加和累积每个 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 列中。
如果你还是喜欢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;
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