Как посчитать Paying Users в SQL
Содержание:
Зачем 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;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%+ — норма. Сравнивайте с категорией.
Связанные темы
- Как посчитать ARPPU в SQL
- Как посчитать MAU в SQL
- Как посчитать MRR в SQL
- Как посчитать trial conversion в SQL
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» — кто платит регулярно.