Совокупная сумма MySQL в зависимости от типа

Используя MySQL, у меня есть эта таблица: 1

Что я пытаюсь сделать, так это кумулятивно суммировать столбец montant по дате, но если строка, которую я добавляю, имеет тип ВКЛАД, я сохраняю ее положительной, а если строка имеет тип ВЫВОД, я делаю ее отрицательной.

Итак, в результате я должен получить:

2021-03-10 10200 (100+2600-2500+10000)
2021-03-11 7700 (10200-2500)

Надеюсь, я ясно дал понять, что я пытаюсь сделать.

Я сделал этот запрос, который, вероятно, закрыт:

выберите бросок (дата как дата) как d, (выберите сумму (монтант) из джекпота, где тип = 'ВКЛАД' и бросок (дата как дату) = d) - (выберите сумму (монтант) из джекпота, где тип = 'WITHDRAW' и cast(date as date) = d ) как значение из джекпота GROUP by cast(date as date);

но это дает мне этот результат

2


person Arbi Saidi    schedule 10.03.2021    source источник


Ответы (1)


Хм . . . Используйте условную агрегацию, чтобы получить правильную сумму. Используйте оконную функцию кумулятивной суммы, чтобы получить текущую сумму:

select date(date),
       sum(case when type = 'CONTRIBUTION' then montant
                when type = 'WITHDRAW' then -montant
           end) as sum_on_date,
       sum(sum(case when type = 'CONTRIBUTION' then montant
                    when type = 'WITHDRAW' then -montant
               end)
          ) over (order by date(date)) as running_sum
from jackpot
group by date(date);
person Gordon Linoff    schedule 10.03.2021