← Назад к вопросам

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: падение выручки (негатив)

Это ключевая метрика для инвесторов и менеджмента - показывает здоровье бизнеса.

SQL: Year-over-Year сравнение выручки | PrepBro