Window functions (оконные функции) позволяют выполнять вычисления по связанным строкам без свёртывания результирующего набора, что делает их идеальными для анализа год от года (YoY).
Функция LAG() извлекает значение из предыдущей строки в упорядоченном результирующем наборе. В сочетании с OVER (ORDER BY year) она даёт доступ к выручке предыдущего года прямо в одном запросе.
SELECT
year,
revenue,
LAG(revenue) OVER (ORDER BY year) AS prev_year_revenue,
revenue - LAG(revenue) OVER (ORDER BY year) AS yoy_change
FROM annual_revenue;
LAG(revenue) OVER (ORDER BY year) получает выручку предыдущего года для каждой строкиrevenue даёт абсолютное изменение YoYprev_year_revenue возвращает NULL, так как предыдущей строки не существуетPARTITION BY, если данные охватывают несколько регионов или сегментов — это перезапускает расчёт для каждой группы(revenue - LAG(revenue) OVER (ORDER BY year))
/ LAG(revenue) OVER (ORDER BY year) * 100 AS yoy_pct_change
NULL или нулевые значения с помощью NULLIF, чтобы избежать ошибок деленияОконная функция LAG() извлекает значения из следующей строки упорядоченного набора результатов, что делает её подходящей для перспективных расчётов, таких как прогнозы будущих лет.
Новый — ещё не проверен сообществом
Вы