Как посчитать Average Handle Time в SQL

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

Зачем AHT

Average Handle Time — talk + hold + wrap-up. Operational metric. Низкий AHT = больше calls per agent, но качество страдает если слишком низкий.

Формула

AHT = (Total Talk Time + Total Hold Time + Total Wrap-up Time) / Calls

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

Данные: calls(call_id, agent_id, talk_seconds, hold_seconds, wrap_seconds, call_ended_at).

SELECT
    DATE_TRUNC('day', call_ended_at) AS day,
    COUNT(*) AS total_calls,
    AVG(talk_seconds + hold_seconds + wrap_seconds) AS aht_seconds,
    AVG(talk_seconds + hold_seconds + wrap_seconds) / 60.0 AS aht_minutes,
    AVG(talk_seconds) AS avg_talk,
    AVG(hold_seconds) AS avg_hold,
    AVG(wrap_seconds) AS avg_wrap
FROM calls
WHERE call_ended_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY 1
ORDER BY 1;

По агентам

SELECT
    agent_id,
    COUNT(*) AS calls,
    AVG(talk_seconds + hold_seconds + wrap_seconds) AS aht,
    PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY talk_seconds + hold_seconds + wrap_seconds) AS median_aht
FROM calls
WHERE call_ended_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY agent_id
HAVING COUNT(*) >= 50
ORDER BY aht;

Top performers — short AHT + high CSAT. Outliers — high AHT alone may мean struggling agent or complex calls.

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

По типам

SELECT
    call_reason,
    COUNT(*) AS calls,
    AVG(talk_seconds + hold_seconds + wrap_seconds) AS aht,
    AVG(csat_score) AS avg_csat
FROM calls
WHERE call_ended_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY call_reason
ORDER BY calls DESC;

Different call types have different natural AHT. Compare within type.

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

Ошибка 1. Только talk time. Hold + wrap matter. Real cost includes all 3.

Ошибка 2. Outliers. Один call 4 hours skews average. Use median + p90.

Ошибка 3. Optimize AHT в isolation. AHT down — but FCR down тоже? Bad trade.

Ошибка 4. Wrap не tracked. Если agents don't log wrap, AHT undercounted.

Ошибка 5. Idle time confusion. Idle (between calls) — не AHT. Different metric (utilization).

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

FAQ

Какой AHT ok?

Industry varies. Tech support: 8-12 min. Banking: 5-7 min. E-com: 3-5 min.

AHT down — это хорошо?

Только если quality (CSAT, FCR) holds. Rushed calls = bad UX.

Wrap-up time?

Post-call admin: ticket update, follow-up email. Should be ≤ talk time.

AHT по channel?

Voice ≈ 5-10 min. Chat ≈ 3-5 min (multi-task). Email — separate (response time).

Median vs Average?

Long tail. Use median + p90. Average — biased by outliers.