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

Проверь себя · 1/3разбор после ответа
Нужно получить 20 самых новых событий из таблицы 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 в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать NPS в Telegram

Как посчитать 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 в отрыве от истории и разрезов не даёт решений. Диагностическая ценность появляется только в динамике и сегментации.

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

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. Сравнение имеет смысл со своей динамикой и между своими сегментами, а не с абсолютными цифрами из чужих отчётов.