← Назад к вопросам
SQL: Year-over-Year сравнение выручки
2.0 Middle🔥 221 комментариев
#SQL и базы данных#Метрики продукта
Условие
У вас есть таблица monthly_revenue:
- month (date)
- revenue (decimal)
Посчитайте YoY (Year-over-Year) изменение выручки для каждого месяца.
Ожидаемый результат:
Таблица с колонками: month, revenue, prev_year_revenue, yoy_change_pct
Источник: задача на SQL
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Year-over-Year сравнение выручки
Решение на PostgreSQL:
SELECT
DATE_TRUNC('month', month)::date AS month,
revenue,
LAG(revenue) OVER (
ORDER BY DATE_TRUNC('month', month)
RANGE BETWEEN INTERVAL '1 year' PRECEDING AND INTERVAL '1 year' PRECEDING
) AS prev_year_revenue,
ROUND((
(revenue - LAG(revenue) OVER (
ORDER BY DATE_TRUNC('month', month)
RANGE BETWEEN INTERVAL '1 year' PRECEDING AND INTERVAL '1 year' PRECEDING
)) / LAG(revenue) OVER (
ORDER BY DATE_TRUNC('month', month)
RANGE BETWEEN INTERVAL '1 year' PRECEDING AND INTERVAL '1 year' PRECEDING
) * 100
), 2) AS yoy_change_pct
FROM monthly_revenue
ORDER BY month;
Более простой вариант с подзапросом:
SELECT
m1.month,
m1.revenue,
m2.revenue AS prev_year_revenue,
ROUND((
(m1.revenue - m2.revenue) / m2.revenue * 100
), 2) AS yoy_change_pct
FROM monthly_revenue m1
LEFT JOIN monthly_revenue m2
ON DATE_TRUNC('month', m1.month) = DATE_TRUNC('month', DATE_ADD(m2.month, INTERVAL '1 year'))
ORDER BY m1.month;
Для MySQL:
SELECT
DATE_FORMAT(m1.month, '%Y-%m-01') AS month,
m1.revenue,
m2.revenue AS prev_year_revenue,
ROUND((m1.revenue - m2.revenue) / m2.revenue * 100, 2) AS yoy_change_pct
FROM monthly_revenue m1
LEFT JOIN monthly_revenue m2
ON DATE_FORMAT(m1.month, '%Y-%m') = DATE_FORMAT(DATE_SUB(m2.month, INTERVAL 1 YEAR), '%Y-%m')
ORDER BY m1.month;
Пример результата:
month | revenue | prev_year_revenue | yoy_change_pct
-----------|---------|-------------------|---------------
2024-01-01 | 100000 | 80000 | 25.00
2024-02-01 | 120000 | 95000 | 26.32
2024-03-01 | 110000 | 110000 | 0.00
2024-04-01 | 130000 | 100000 | 30.00
Вывод: год к году выручка растёт на 20-30% (кроме марта - стабильно).
Интерпретация:
- YoY > 0: рост выручки по сравнению с прошлым годом (позитив)
- YoY = 0: стагнация (нет роста)
- YoY < 0: падение выручки (негатив)
Это ключевая метрика для инвесторов и менеджмента - показывает здоровье бизнеса.