Как посчитать Upgrade Rate в SQL
Содержание:
Зачем 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;По сегментам
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.
Связанные темы
- Как посчитать MRR в SQL
- Как посчитать NRR в SQL
- Как посчитать renewal rate в SQL
- Как посчитать MRR Churn в SQL
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 падает?
- 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).