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

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

Зачем Upgrade Rate

Upgrade — лучший type of expansion. Юзеры платят больше = engaged + продукт solves bigger problem. High Upgrade Rate коррелирует с PMF.

Формула

Upgrade Rate = customers_upgraded / total_customers × 100%
Expansion MRR = SUM(new_plan - old_plan) для upgraded

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

Данные: plan_changes(user_id, old_plan, new_plan, change_at, plan_value).

WITH base AS (
    SELECT
        user_id,
        BOOL_OR(new_plan_value > old_plan_value) AS upgraded
    FROM plan_changes
    WHERE change_at >= CURRENT_DATE - INTERVAL '90 days'
    GROUP BY user_id
)
SELECT
    COUNT(*) AS users_with_changes,
    COUNT(*) FILTER (WHERE upgraded) AS upgraded,
    COUNT(*) FILTER (WHERE upgraded)::NUMERIC * 100 / NULLIF(COUNT(*), 0) AS upgrade_rate_pct
FROM base;

Expansion MRR

SELECT
    DATE_TRUNC('month', change_at) AS month,
    COUNT(*) FILTER (WHERE new_plan_value > old_plan_value) AS upgrade_events,
    SUM(new_plan_value - old_plan_value) FILTER (WHERE new_plan_value > old_plan_value) AS expansion_mrr,
    COUNT(*) FILTER (WHERE new_plan_value < old_plan_value) AS downgrade_events,
    SUM(old_plan_value - new_plan_value) FILTER (WHERE new_plan_value < old_plan_value) AS contraction_mrr
FROM plan_changes
WHERE change_at >= '2026-01-01'
GROUP BY 1
ORDER BY 1;
Закрепи формулу upgrade rate в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать upgrade rate в Telegram

По сегментам

SELECT
    u.segment,
    COUNT(DISTINCT u.user_id) AS users,
    COUNT(DISTINCT p.user_id) FILTER (WHERE p.new_plan_value > p.old_plan_value) AS upgraded,
    COUNT(DISTINCT p.user_id) FILTER (WHERE p.new_plan_value > p.old_plan_value)::NUMERIC * 100
        / NULLIF(COUNT(DISTINCT u.user_id), 0) AS upgrade_rate_pct
FROM users u
LEFT JOIN plan_changes p ON p.user_id = u.user_id
    AND p.change_at >= CURRENT_DATE - INTERVAL '180 days'
GROUP BY u.segment
ORDER BY upgrade_rate_pct DESC;

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

Ошибка 1. Multiple upgrades. Юзер upgraded 3 раза. Counts as 1 user (upgraded) или 3 events?

Ошибка 2. Upgrade + downgrade. Юзер upgraded Q1, downgraded Q2. Считать в обоих или net?

Ошибка 3. Plan value vs feature changes. Plan same value, more features → не upgrade в money, но в engagement.

Ошибка 4. Trial → paid не upgrade. Free → first paid — это conversion, не upgrade.

Ошибка 5. Pricing changes. Если company увеличила plan prices, существующие grandfathered. Не считайте как upgrade.

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

FAQ

Какой Upgrade Rate ok?

SaaS B2B: 10-25% annually. B2C subscription: 5-15%.

Upgrade vs Cross-sell?

Upgrade — same product, higher tier. Cross-sell — new product line.

Upgrade Rate падает?

  1. Pricing tiers misaligned. 2) Free version too good. 3) Mid-tier «sweet spot» отсутствует.

Auto-upgrade?

Когда usage exceeds limit. Counts as expansion, но less «willingness to pay» signal.

Upgrade Rate vs Expansion?

Upgrade — single dimension. Expansion — total (seats, products, usage).