Как посчитать ARR в SQL
Содержание:
Что такое ARR
ARR (Annual Recurring Revenue) — годовая повторяющаяся выручка. Оценка того, сколько компания заработает за следующие 12 месяцев при условии, что текущий состав подписок не изменится.
ARR — главная метрика SaaS. По нему оценивают компании, считают valuation, ставят квартальные цели. На собесе аналитика SaaS ARR спрашивают вместе с MRR.
Формула
ARR = MRR × 12Или эквивалентно:
ARR = SUM(annual_subscriptions) + SUM(monthly_subscriptions × 12)Если все подписки месячные — формула простая. Если есть annual и multi-year — нужно нормализовать к году.
SQL: текущий ARR
Допустим, есть таблица subscriptions с активными подписками и их MRR-вкладом:
-- subscriptions: customer_id, mrr, status, created_at, cancelled_at
SELECT SUM(mrr) * 12 AS arr
FROM subscriptions
WHERE status = 'active';Если в таблице есть annual-подписки с полем billing_period:
SELECT
SUM(
CASE
WHEN billing_period = 'monthly' THEN amount * 12
WHEN billing_period = 'annual' THEN amount
WHEN billing_period = 'biennial' THEN amount / 2
ELSE 0
END
) AS arr
FROM subscriptions
WHERE status = 'active';SQL: ARR-curve по дням
Если хотите видеть, как ARR менялся со временем — нужна таблица событий подписок.
-- subscription_events: customer_id, event_date, mrr_change
WITH days AS (
SELECT generate_series('2026-01-01'::DATE, CURRENT_DATE, INTERVAL '1 day')::DATE AS day
),
events AS (
SELECT
event_date::DATE AS day,
SUM(mrr_change) AS daily_change
FROM subscription_events
GROUP BY 1
)
SELECT
d.day,
SUM(COALESCE(e.daily_change, 0)) OVER (ORDER BY d.day) * 12 AS arr
FROM days d
LEFT JOIN events e USING (day)
ORDER BY d.day;SUM(...) OVER (ORDER BY day) — running total. Без этого получите дельту за день, не накопленный ARR.
Что включать в ARR
ARR должен включать только повторяющиеся компоненты выручки:
- Subscription fee — да
- Setup fee (one-time) — нет
- Annual upgrade fee — нет, если это разовая
- Implementation services — нет
- Add-ons по подписке — да
На собесе спросят: «У клиента выручка $1200 — $1000 подписка + $200 одноразовый setup. Какой его вклад в ARR?» Ответ: $1000 × 12 = $12 000 (только подписка).
Частые ошибки
Считать ARR от выручки. Выручка — это все деньги, которые пришли. ARR — нормализованная регулярная часть. Включение one-time-revenue даёт завышенный ARR.
Не учитывать churned. Если клиент отменил подписку 3 дня назад — он не должен входить в текущий ARR.
Использовать LIVE дельты от MRR без сглаживания. Один большой клиент → ARR прыгнул. Используйте rolling-окна для трендов.
Путать ARR и Run-rate revenue. ARR считает по подпискам на сегодня. Run-rate = текущий месяц × 12. Run-rate включает one-time-revenue, ARR — нет.
Integer division. SUM(amount) / 2 для biennial → если amount integer, получите усечение. Используйте NUMERIC или 1.0 *.
FAQ
ARR vs MRR — какой использовать?
MRR — для месячного управления (KPI команды роста). ARR — для квартального и годового планирования, valuation, board reports. На собесе оба обязательны.
Что считать «активной» подпиской?
Зависит от компании. Стандарт: статус active или past_due (платёж задерживается, но клиент не отменил). cancelled, expired, paused — не входят.
Это официальная информация?
Нет. Статья основана на индустриальных практиках SaaS-аналитики.