Чтобы получить накопительную сумму, необходимо использовать обычную оконную функцию SUM()
, однако синтаксис будет отличаться.
Когда мы хотим просуммировать значения в рамках окна, то мы пишем функцию и указываем колонку партиции (группировки):
sum(something) over (partition by group_1)
Когда мы хотим получить не просто сумму, а некоторое накопление, то в этом случае нам уже нужно работать с тем, как мы расположим значения в окне. По сути за расположение значений в окне отвечает сортировка и контроль размера окна.
Рассчитаем для продукта 'Bread - Pumpernickel' накопительную сумму продаж по дням:
select
productname,
date,
sum(quantity) over (partition by productname order by date) as quantity_sale
from
supermarket_sales
join
supermarket_products
on supermarket_sales.productid = supermarket_products.productid
where
productname = 'Bread - Pumpernickel'
order by
date
Как видите, чтобы получить накопительную сумму, нужно просто добавить сортировку. Однако в этом случае мы просто считаем сумму за все предыдущие дни, включая текущий.