mysql Совокупная сумма для каждого уникального идентификатора в каждой продаже: - PullRequest
0 голосов
/ 05 февраля 2020

У меня проблемы с добавлением и накоплением сумм по идентификатору, я использую это решение, но оно не работает и складывает все идентификаторы,

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 Ответ

1 голос
/ 05 февраля 2020

Вместо оператора UPDATE можно использовать оператор SELECT, содержащий функцию анализа окна c: столбец

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, чтобы выделить guish суммы, сгруппированные по product_id

Демо3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...