Как посчитать Win Rate в SQL
Содержание:
Зачем 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 с малой выборкой.
По сегментам
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 — куда учитывать? Договоритесь.
Связанные темы
- Как посчитать conversion в SQL
- Как посчитать funnel в SQL
- Как посчитать ROAS в SQL
- Как посчитать unit-economics в SQL
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. Полезно для прогноза.