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

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

Зачем Win Rate

В B2B sales главная метрика — Win Rate. Если по 100 квалифицированным лидам закрывается 20 сделок — это 20%. Падение на 5 п.п. — серьёзный сигнал: либо лиды стали хуже, либо команда продаёт хуже, либо продукт не догоняет конкурентов.

Что такое Win Rate

Win Rate — доля выигранных сделок от общего числа закрытых.

Win Rate = won_deals / (won_deals + lost_deals) × 100%

Считают на closed-сделках (не учитывают open / in-progress).

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

Данные: deals(deal_id, status, sales_rep, value, closed_at).

SELECT
    COUNT(*) FILTER (WHERE status = 'won') AS won,
    COUNT(*) FILTER (WHERE status = 'lost') AS lost,
    COUNT(*) FILTER (WHERE status = 'won')::NUMERIC * 100
        / NULLIF(COUNT(*) FILTER (WHERE status IN ('won','lost')), 0) AS win_rate_pct
FROM deals
WHERE closed_at >= '2026-01-01'
  AND closed_at <  '2026-05-01';

Важно: open сделки исключаются. Иначе Win Rate занижен.

Win Rate по sales rep

SELECT
    sales_rep,
    COUNT(*) FILTER (WHERE status = 'won') AS won,
    COUNT(*) FILTER (WHERE status = 'lost') AS lost,
    COUNT(*) FILTER (WHERE status = 'won')::NUMERIC * 100
        / NULLIF(COUNT(*) FILTER (WHERE status IN ('won','lost')), 0) AS win_rate_pct,
    SUM(value) FILTER (WHERE status = 'won') AS revenue
FROM deals
WHERE closed_at >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY sales_rep
HAVING COUNT(*) FILTER (WHERE status IN ('won','lost')) >= 10
ORDER BY win_rate_pct DESC;

HAVING >= 10 отсекает rep с малой выборкой.

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

По сегментам

SELECT
    deal_size_segment,
    industry,
    COUNT(*) FILTER (WHERE status = 'won') AS won,
    COUNT(*) FILTER (WHERE status = 'won')::NUMERIC * 100
        / NULLIF(COUNT(*) FILTER (WHERE status IN ('won','lost')), 0) AS win_rate
FROM deals
WHERE closed_at >= CURRENT_DATE - INTERVAL '180 days'
GROUP BY deal_size_segment, industry
ORDER BY win_rate DESC;

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

Ошибка 1. Включать open в знаменатель. В CRM есть «открытые» сделки. В Win Rate они не считаются — иначе rate занижен.

Ошибка 2. Считать только won без lost. won / total_deals_started — это не Win Rate, а conversion. Используйте won / (won+lost).

Ошибка 3. Не учитывать deal stage. Сделка на stage «discovery» vs «contract» — разная зрелость. Stage-based Win Rate полезнее.

Ошибка 4. Average по rep без weight. Rep с 1 сделкой 100% Win Rate выглядит лучше rep с 50 сделок 60%. Weight по объёму.

Ошибка 5. Не учитывать deal value. Win Rate 20% при $1M deals лучше Win Rate 50% при $10K. Смотрите revenue-weighted.

Ошибка 6. Cross-quarter. Сделка стартовала в Q1, закрылась в Q2 — куда учитывать? Договоритесь.

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

FAQ

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

B2B SaaS — 15-25% from MQL. Enterprise — 20-40% from SQL. Зависит от lead quality.

Win Rate упал — что делать?

Декомпозиция: 1) lead quality (плохие лиды), 2) sales execution (rep performance), 3) product/competitor.

Win Rate vs Conversion Rate?

Conversion — funnel-level. Win Rate — closed-deals level.

Stage-based Win Rate?

Полезно. Stage 1 → Won ниже, Stage 4 → Won выше.

Forecasted Win Rate?

Историческая Win Rate × open pipeline = forecast revenue. Полезно для прогноза.