Как посчитать Growth Rate в SQL

Закрепи формулу growth rate в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать growth rate в Telegram

Зачем Growth Rate

Growth Rate — главная метрика стартапов. Investor смотрит: 20% MoM = $1M в декабре превратится в $9.5M за год. 5% MoM = только $1.8M. Growth Rate — нелинейный, не путать с absolute revenue.

Формула

Growth Rate = (current - previous) / previous × 100%

Или:

Growth Rate (period-over-period) = (current / previous - 1) × 100%

Базовый расчёт

Данные: monthly_revenue(month, revenue).

SELECT
    month,
    revenue,
    LAG(revenue) OVER (ORDER BY month) AS prev_revenue,
    (revenue::NUMERIC / NULLIF(LAG(revenue) OVER (ORDER BY month), 0) - 1) * 100 AS growth_pct
FROM monthly_revenue
ORDER BY month;

Compound Growth

Кумулятивный за период:

WITH first_last AS (
    SELECT
        (SELECT revenue FROM monthly_revenue ORDER BY month ASC LIMIT 1) AS start_val,
        (SELECT revenue FROM monthly_revenue ORDER BY month DESC LIMIT 1) AS end_val,
        (SELECT COUNT(*) - 1 FROM monthly_revenue) AS periods
)
SELECT
    start_val,
    end_val,
    periods,
    POWER(end_val::NUMERIC / NULLIF(start_val, 0), 1.0 / NULLIF(periods, 0)) - 1 AS compound_growth_pct
FROM first_last;

Это среднегеометрический рост (как CAGR, но period-agnostic).

Закрепи формулу growth rate в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать growth rate в Telegram

Smoothing

3-month rolling growth — smoothes noisy data:

WITH smoothed AS (
    SELECT
        month,
        revenue,
        AVG(revenue) OVER (
            ORDER BY month
            ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
        ) AS rolling_3m_avg
    FROM monthly_revenue
)
SELECT
    month,
    revenue,
    rolling_3m_avg,
    (rolling_3m_avg / NULLIF(LAG(rolling_3m_avg) OVER (ORDER BY month), 0) - 1) * 100 AS smoothed_growth_pct
FROM smoothed
ORDER BY month;

Частые ошибки

Ошибка 1. Confuse arithmetic mean of growth с compound. Mean(growth) ≠ compound growth. Используйте POWER для compound.

Ошибка 2. Period-over-period vs annualized. Monthly growth 10% ≠ 120% annual. Compound: (1.1)^12 - 1 = 213%.

Ошибка 3. Negative base. Если prev = 0 или negative — growth не определён (или infinite).

Ошибка 4. Сравнивать MoM и WoW. Разные периоды. Не сравнивайте напрямую.

Ошибка 5. Outliers единичных месяцев. Один разовый shock искажает growth. Smoothing помогает.

Связанные темы

FAQ

MoM growth 5% — норма?

Зрелый бизнес — да. Стартап pre-PMF — мало. 10-20% MoM — растущий стартап.

Growth Rate vs CAGR?

Growth Rate — между двумя periods. CAGR — annualized over multi-year.

Smoothed growth — обманывает?

Нет, показывает trend без шума. Но для real-time alerting нужен raw.

Negative growth — что делать?

Декомпозиция: что упало (acquisition, retention, AOV)? Где конкретно?

Compound vs simple growth?

Compound учитывает reinvestment. Simple = linear. Для growth — compound.