Как посчитать NPS в SQL
events (по времени event_time) и показать их в выдаче сверху. Какой запрос верный?Содержание:
Что такое NPS и что он показывает
NPS (Net Promoter Score) — индекс лояльности, который измеряет готовность пользователей рекомендовать продукт. Он строится на одном вопросе: «Насколько вероятно, что вы порекомендуете нас другу или коллеге по шкале от 0 до 10?». За кажущейся простотой стоит сильный сигнал: рекомендация — это поступок, за который человек ручается своей репутацией, поэтому она коррелирует с реальной лояльностью лучше, чем абстрактная «удовлетворённость».
NPS ценят за то, что он одновременно опережающий и действенный. Высокий NPS обычно предшествует низкому оттоку и сильному сарафанному радио, снижая стоимость привлечения. Низкий — ранний предвестник проблем с удержанием, которые ещё не видны в выручке. Именно поэтому NPS попадает в квартальные цели и на дашборды к руководству, а аналитику регулярно прилетают запросы «какой у нас NPS», «упал ли после релиза», «отличается ли у премиума от бесплатных».
Важно не путать NPS с CSAT и CES. NPS — про долгосрочное отношение к бренду в целом, CSAT — про удовлетворённость конкретным взаимодействием, CES — про приложенное усилие. Подробное сравнение — в статье CSAT vs NPS vs CES.
Формула и группы
Ответы на шкале 0–10 делятся на три группы:
- Промоутеры (9–10) — лояльное ядро, драйвер сарафанного радио.
- Нейтралы (7–8) — довольны, но без привязанности; легко уходят к конкуренту.
- Критики (0–6) — недовольные, источник негатива и оттока.
NPS = % промоутеров − % критиковКлючевой нюанс, на котором путаются: нейтралы (7–8) в формуле не участвуют — они не идут ни в плюс, ни в минус. NPS — это не процент и не средний балл, а разница долей двух групп, поэтому он принимает значения от −100 до +100. Сдвиг нейтралов в промоутеры или в критики меняет NPS, хотя сами нейтралы в числителе не стоят.
Как читать NPS и бенчмарки
Абсолютное значение NPS почти бесполезно вне контекста. Положительный NPS означает, что промоутеров больше, чем критиков; выше +50 обычно считают сильным результатом. Но сравнивать своё число с чужими компаниями рискованно: на NPS сильно влияют метод опроса (в приложении, по email, после покупки), момент запроса и культурные особенности выставления оценок. В одних странах охотно ставят 9–10, в других редко поднимаются выше 8, и это сдвигает NPS на десятки пунктов без всякой разницы в продукте.
Поэтому NPS читают в динамике и в разрезах, а не как единичную цифру. Полезнее вопроса «хороший ли у нас NPS» вопросы «растёт ли он», «в каком сегменте он проваливается» и «что изменилось после релиза». Одно число в отрыве от истории и сегментации — это то, за что на собесе снимают баллы.
NPS в разных отраслях
Вес и трактовка NPS зависят от типа продукта — это и есть доменное мышление, которое проверяют на собеседовании.
В SaaS и подписках NPS — предиктор продления. Критики среди корпоративных клиентов сигналят о риске непродления контракта задолго до даты продления, поэтому NPS там связывают с NRR и работой аккаунт-менеджеров. В e-commerce различают relational NPS (отношение к магазину в целом) и transactional (оценка после конкретного заказа) — их нельзя смешивать, потому что они отвечают на разные вопросы. В медиа и контентных подписках NPS дополняют поведенческими метриками: пользователь может ставить 9, но не продлевать, если перестал потреблять контент, поэтому там NPS всегда читают рядом с retention.
Общий принцип: NPS почти никогда не живёт один. Его сила — в связке с оттоком, продлением и поведением, а не в самом числе.
Как посчитать NPS в SQL
Данные в примерах — таблица nps_responses(user_id, score, responded_at).
Общий NPS за период. Помним про целочисленное деление в PostgreSQL — умножаем на 100.0, чтобы получить дробь:
SELECT
100.0 * (
COUNT(*) FILTER (WHERE score >= 9)
- COUNT(*) FILTER (WHERE score <= 6)
) / NULLIF(COUNT(*), 0) AS nps,
COUNT(*) AS responses
FROM nps_responses
WHERE responded_at >= '2026-04-01';Поле responses выводим рядом намеренно: NPS на 30 ответах статистически шумный, и процент без размера выборки вводит в заблуждение.
Динамика по месяцам — так ловят эффект релизов:
SELECT
DATE_TRUNC('month', responded_at) AS month,
100.0 * (
COUNT(*) FILTER (WHERE score >= 9)
- COUNT(*) FILTER (WHERE score <= 6)
) / NULLIF(COUNT(*), 0) AS nps,
COUNT(*) AS responses
FROM nps_responses
GROUP BY 1
ORDER BY 1;Разрез по сегментам — где именно проседает лояльность:
SELECT
u.tier,
100.0 * (
COUNT(*) FILTER (WHERE n.score >= 9)
- COUNT(*) FILTER (WHERE n.score <= 6)
) / NULLIF(COUNT(*), 0) AS nps,
COUNT(*) AS responses
FROM nps_responses n
JOIN users u ON u.id = n.user_id
GROUP BY u.tier
HAVING COUNT(*) >= 30
ORDER BY nps DESC;HAVING COUNT(*) >= 30 отсекает сегменты с малой выборкой, где NPS скачет случайно. Связку NPS с оттоком считают, сегментируя пользователей на промоутеров/нейтралов/критиков и сравнивая их отток — обычно у критиков он кратно выше.
Примеры с собеседований
На продуктовом собесе NPS чаще проверяют не определением, а пониманием механики и умением диагностировать. Разберём типовые вопросы с оценкой ответов.
«Как именно считается NPS? Куда деваются оценки 7–8?» Слабый ответ — «средний балл» или «процент довольных». Сильный ответ: это разница долей промоутеров (9–10) и критиков (0–6), нейтралы (7–8) выкидываются из числителя, значение от −100 до +100, а не процент. Умение чётко проговорить, что нейтралы не участвуют, сразу отделяет тех, кто реально считал метрику.
«NPS упал с 40 до 30. Как будешь разбираться?» Слабый ответ — «посмотрю, почему упал». Сильный: сначала проверить, не изменился ли состав ответивших и их доля (самоотбор: после плохого релиза чаще отвечают недовольные), затем разрез по сегментам, каналам и версиям, привязка к дате релиза, чтение комментариев критиков. Первым делом убеждаемся, что просела лояльность, а не сместилась выборка.
«NPS 50 — это хорошо?» Сильный ответ уходит от абсолютного сравнения: зависит от отрасли и метода опроса, сравнивать нужно со своей же динамикой и сегментами, а не с чужими цифрами из отчётов. Прогнать такие вопросы с разбором можно в Карьернике.
Частые ошибки
Считать NPS как среднее или процент. Это разница долей промоутеров и критиков, нейтралы 7–8 не входят в числитель. Ошибка в самой формуле — самая грубая и самая частая.
Смешивать шкалы. 0–10, 1–10 и 0–5 дают несопоставимые результаты. Шкалу фиксируют один раз и не меняют, иначе история метрики рвётся.
Малая доля ответивших и самоотбор. Если отвечают 3% пользователей, и это в основном крайне довольные или крайне злые, NPS смещён. Долю ответивших считают и следят за ней наравне с самим NPS.
Одно число без динамики и сегментов. NPS в отрыве от истории и разрезов не даёт решений. Диагностическая ценность появляется только в динамике и сегментации.
Связанные темы
- Что такое NPS простыми словами
- CSAT vs NPS vs CES
- Кейс: NPS упал — разбор для собеса
- Churn простыми словами
- Как считать retention
FAQ
NPS — это процент?
Нет. NPS — разница долей промоутеров (9–10) и критиков (0–6), выраженная в пунктах от −100 до +100. Нейтралы (7–8) в формуле не участвуют. Это частая ошибка: NPS путают со средним баллом или с процентом довольных, хотя это именно разница двух долей.
Сколько ответов нужно для стабильного NPS?
Для устойчивой цифры обычно хотят хотя бы 100–200 ответов, а для сегментных разрезов — больше. На малой выборке NPS сильно шумит: несколько критиков могут увести его на десятки пунктов. Поэтому размер выборки всегда показывают рядом с самим значением.
NPS или CSAT — что выбрать?
Зависит от вопроса. NPS измеряет долгосрочную лояльность к продукту в целом, CSAT — удовлетворённость конкретным взаимодействием (покупкой, обращением в поддержку). Их часто используют вместе: CSAT ловит проблемы в моменте, NPS — общее отношение к бренду.
Почему нельзя сравнивать свой NPS с чужими компаниями?
Потому что на NPS сильно влияют метод и момент опроса и культура выставления оценок. Один и тот же продукт даст разный NPS при опросе в приложении и по email. Сравнение имеет смысл со своей динамикой и между своими сегментами, а не с абсолютными цифрами из чужих отчётов.