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

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

Что такое 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';
Закрепи формулу ARR в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать ARR в Telegram

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-аналитики.