НАКОПЛЕННАЯ СУММА ЧЕРЕЗ СОРТИРОВКУ

НАКОПЛЕННАЯ СУММА ЧЕРЕЗ СОРТИРОВКУ

Чтобы получить накопительную сумму, необходимо использовать обычную оконную функцию 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

Как видите, чтобы получить накопительную сумму, нужно просто добавить сортировку. Однако в этом случае мы просто считаем сумму за все предыдущие дни, включая текущий.