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

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

Зачем Paying Users

В freemium-моделях MAU 1M звучит круто. Paying users — 10K. Paying ratio 1% — отрасль-средняя. Метрика отделяет «активных» от «монетизируемых».

Что такое Paying User

Paying User — пользователь, совершивший хотя бы один платёж за период.

Paying ∈ period: ∃ payment(amount > 0) ∈ period

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

Данные: transactions(user_id, amount, status, paid_at).

SELECT
    DATE_TRUNC('month', paid_at) AS month,
    COUNT(DISTINCT user_id) AS paying_users,
    SUM(amount) AS total_revenue,
    SUM(amount)::NUMERIC / NULLIF(COUNT(DISTINCT user_id), 0) AS arppu
FROM transactions
WHERE status = 'success'
  AND amount > 0
  AND paid_at >= '2026-01-01'
GROUP BY 1
ORDER BY 1;

Paying Ratio

WITH active AS (
    SELECT
        DATE_TRUNC('month', event_date) AS month,
        COUNT(DISTINCT user_id) AS mau
    FROM events
    WHERE event_date >= '2026-01-01'
    GROUP BY 1
),
paying AS (
    SELECT
        DATE_TRUNC('month', paid_at) AS month,
        COUNT(DISTINCT user_id) AS paying
    FROM transactions
    WHERE status = 'success' AND amount > 0
    GROUP BY 1
)
SELECT
    a.month,
    a.mau,
    COALESCE(p.paying, 0) AS paying,
    COALESCE(p.paying, 0)::NUMERIC * 100 / NULLIF(a.mau, 0) AS paying_ratio_pct
FROM active a
LEFT JOIN paying p ON p.month = a.month
ORDER BY a.month;
Закрепи формулу paying users в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать paying users в Telegram

Segmented

SELECT
    u.acquisition_channel,
    COUNT(DISTINCT t.user_id) AS paying_users,
    AVG(t.amount) AS avg_payment,
    SUM(t.amount) AS revenue
FROM transactions t
JOIN users u ON u.user_id = t.user_id
WHERE t.status = 'success' AND t.amount > 0
  AND t.paid_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY u.acquisition_channel
ORDER BY revenue DESC;

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

Ошибка 1. Включать failed transactions. Carded but failed — не paying. status = 'success'.

Ошибка 2. Считать chargebacks. Chargeback = revenue вернули, payment не считается успешным. Учитывайте refunds.

Ошибка 3. Trial users как paying. Free trial — не paying. Фильтруйте amount > 0.

Ошибка 4. Cross-account. Юзер платит за организацию — на 1 paying user может быть 100 active. В B2B особенно.

Ошибка 5. Paying ratio mobile vs free-to-play. Free-to-play 1-3% — норма. Subscription 30%+ — норма. Сравнивайте с категорией.

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

FAQ

Какой Paying Ratio считается хорошим?

Free-to-play mobile: 1-3%. Freemium SaaS: 5-15%. E-com (every user is paying): 100%.

Paying или Active?

Paying — кто реально приносит revenue. Active — кто использует. Смотрите обе.

Paying падает — что делать?

Декомпозиция: 1) acquisition (мало новых paying), 2) retention paying (отвал лояльных), 3) conversion (free → paid падает).

Paying ratio mobile vs desktop?

Mobile обычно ниже (impulse purchases меньше). Desktop — выше.

Один платёж — paying?

Технически да. Но в продуктовом смысле важно «engaged paying» — кто платит регулярно.