Как посчитать headcount growth в SQL
Содержание:
Зачем headcount growth
Headcount growth — основная финансовая метрика стартапа: payroll = 60-80% операционных расходов. Если рост сотрудников опережает рост revenue, runway сокращается. Если меньше — компания stuck. Метрика основа planning и burn rate.
Net new hires
net_new_hires = hires - leavers (за период)
growth_rate = net_new / start_headcountGrowth rate в SQL
WITH months AS (
SELECT generate_series(
DATE_TRUNC('month', CURRENT_DATE - INTERVAL '24 months')::DATE,
DATE_TRUNC('month', CURRENT_DATE)::DATE,
INTERVAL '1 month'
)::DATE AS month_start
),
monthly AS (
SELECT
m.month_start AS month,
COUNT(*) FILTER (WHERE e.hire_date >= m.month_start
AND e.hire_date < m.month_start + INTERVAL '1 month') AS hires,
COUNT(*) FILTER (WHERE e.termination_date >= m.month_start
AND e.termination_date < m.month_start + INTERVAL '1 month') AS leavers
FROM months m
LEFT JOIN employees e ON TRUE
GROUP BY m.month_start
),
headcount_history AS (
SELECT
month,
hires - leavers AS net_change,
SUM(hires - leavers) OVER (ORDER BY month) AS cumulative_headcount
FROM monthly
)
SELECT
month,
net_change,
cumulative_headcount,
net_change::NUMERIC * 100 / NULLIF(LAG(cumulative_headcount) OVER (ORDER BY month), 0) AS monthly_growth_pct
FROM headcount_history
ORDER BY month;Healthy startup: 3-7% monthly headcount growth. Свыше 10% — hypergrowth. Меньше 1% — стабильное состояние.
По департаментам
SELECT
department,
COUNT(*) FILTER (WHERE hire_date BETWEEN '2025-01-01' AND '2025-12-31') AS hires,
COUNT(*) FILTER (WHERE termination_date BETWEEN '2025-01-01' AND '2025-12-31') AS leavers,
COUNT(*) FILTER (WHERE hire_date BETWEEN '2025-01-01' AND '2025-12-31') -
COUNT(*) FILTER (WHERE termination_date BETWEEN '2025-01-01' AND '2025-12-31') AS net_new
FROM employees
GROUP BY department
ORDER BY net_new DESC;Engineering обычно главный driver growth. Sales — second.
Прогноз
Линейная экстраполяция:
WITH growth AS (
SELECT
month,
cumulative_headcount,
cumulative_headcount - LAG(cumulative_headcount, 12) OVER (ORDER BY month) AS yoy_growth
FROM headcount_history
)
SELECT
AVG(yoy_growth) FILTER (WHERE month >= CURRENT_DATE - INTERVAL '3 months') AS recent_yoy_growth,
(SELECT cumulative_headcount FROM growth ORDER BY month DESC LIMIT 1)
+ AVG(yoy_growth) FILTER (WHERE month >= CURRENT_DATE - INTERVAL '3 months') AS projected_next_year
FROM growth;Если YoY growth = 100, current = 250, прогноз next year = 350.
Частые ошибки
Ошибка 1. Считать только hires. Без leavers получается gross hires, не net growth.
Ошибка 2. Включать contractors. Contractor не headcount. Отдельно track contingent workforce.
Ошибка 3. Игнорировать seasonal hiring. Q3-Q4 hiring обычно больше (planning под Q1). Сравнивайте YoY.
Ошибка 4. Total с founder/exec. Founder hire = special event, искажает growth.
Ошибка 5. Один growth rate. Engineering vs G&A имеют разный growth. Сегментируйте.
Связанные темы
- Как посчитать employee turnover в SQL
- Как посчитать new users в SQL
- Как посчитать growth rate в SQL
- Как посчитать burn rate в SQL
FAQ
Какой headcount growth норма?
Series A startup: 5-15% monthly. Series C: 2-5%. Public: 1-3%.
Net vs gross hires?
Net = hires − leavers. Gross = только hires. Net реальный.
Можно ли rapid growth?
Yes — но рисково. Hiring quality drops at scale. Onboarding bottleneck.
Project headcount?
Combine YoY trend + planned hires. Plus buffer на turnover.
Headcount vs revenue ratio?
Revenue per employee — индикатор efficiency. SaaS: $200k-500k revenue/employee.