Кумулятивная сумма в Redshift

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

Redshift имеет прекрасный инструмент window functions, который позволяет гибко и без костылей вычислять различные параметры для аналитики.

Простой пример, допустим есть гипотетическая таблица с заказами, она содержит идентификатор записи, дату покупки и сам продукт, надо найти кумулятивную сумму количества покупок по продуктам по мере увеличения даты.

Для начала найдем просто количество покупок в разрезе продуктов и дат:

Теперь запрос с кумулятивной суммой

Кумулятивная сумма вычисляется здесь: SUM(day_purchases) OVER (
PARTITION BY product ORDER BY product, purchase_date
ROWS UNBOUNDED PRECEDING)

Стоит отметить что:
PARTITION BY – то по чему группируются строки
ORDER BY – сортировка строк в рамках группы
ROWS – детали ограничения набора строк

Так же стоит помнить, что оконные функции вычисляются одними из последних в запросе, а именно, перед последним ORDER BY (когда JOIN, WHERE, GROUP BY, HAVING уже отработали).

Как было сказано выше redshift предоставляет гибкие инструменты для аналитики, которыми легко и удобно пользоваться.