Как посчитать Email Open Rate в SQL
Содержание:
Зачем Email Open Rate
Subject line — single biggest lever email marketing. Open Rate показывает, насколько subject привлёк. A/B-тестируйте subjects → growth Open Rate → больше потенциальных CTR.
Формула
Open Rate = unique_opens / unique_delivered × 100%Considerations: bounced emails, spam folders, no-image clients.
Базовый расчёт
Данные: email_events(campaign_id, user_id, event_type, event_time).
WITH stats AS (
SELECT
campaign_id,
COUNT(DISTINCT user_id) FILTER (WHERE event_type = 'delivered') AS delivered,
COUNT(DISTINCT user_id) FILTER (WHERE event_type = 'open') AS opens
FROM email_events
WHERE event_time >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY campaign_id
)
SELECT
campaign_id,
delivered,
opens,
opens::NUMERIC * 100 / NULLIF(delivered, 0) AS open_rate_pct
FROM stats
ORDER BY open_rate_pct DESC;По кампаниям
SELECT
c.campaign_name,
c.subject_line,
COUNT(DISTINCT e.user_id) FILTER (WHERE e.event_type = 'delivered') AS delivered,
COUNT(DISTINCT e.user_id) FILTER (WHERE e.event_type = 'open') AS opens,
COUNT(DISTINCT e.user_id) FILTER (WHERE e.event_type = 'open')::NUMERIC * 100
/ NULLIF(COUNT(DISTINCT e.user_id) FILTER (WHERE e.event_type = 'delivered'), 0) AS open_rate
FROM email_events e
JOIN campaigns c ON c.campaign_id = e.campaign_id
WHERE e.event_time >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY c.campaign_name, c.subject_line
ORDER BY open_rate DESC;Open Rate vs CTR
SELECT
campaign_id,
COUNT(DISTINCT user_id) FILTER (WHERE event_type = 'delivered') AS delivered,
COUNT(DISTINCT user_id) FILTER (WHERE event_type = 'open') AS opens,
COUNT(DISTINCT user_id) FILTER (WHERE event_type = 'click') AS clicks,
COUNT(DISTINCT user_id) FILTER (WHERE event_type = 'open')::NUMERIC * 100
/ NULLIF(COUNT(DISTINCT user_id) FILTER (WHERE event_type = 'delivered'), 0) AS open_rate,
COUNT(DISTINCT user_id) FILTER (WHERE event_type = 'click')::NUMERIC * 100
/ NULLIF(COUNT(DISTINCT user_id) FILTER (WHERE event_type = 'open'), 0) AS click_to_open_rate
FROM email_events
GROUP BY campaign_id;CTOR (Click-to-Open Rate) — лучшая метрика контент-quality после subject line.
Частые ошибки
Ошибка 1. Apple Mail Privacy Protection. С 2021 Apple загружает images автоматически → инфляция Open Rate. Нужны workarounds (link clicks).
Ошибка 2. Bot opens. Spam-filters automatically open. Inflate Open Rate.
Ошибка 3. Sent vs Delivered. Sent — попытался отправить. Delivered — успешно дошло. Используйте delivered.
Ошибка 4. Multiple opens. Юзер открыл 5 раз → 5 events. Use COUNT DISTINCT user_id, not COUNT(*).
Ошибка 5. Inactive subscribers. Если 50% subscribers неактивны (не открывают вообще) — overall Open Rate низкий, но active OR может быть высокий.
Связанные темы
- Как посчитать CTR в SQL
- Как посчитать конверсию в SQL
- Как посчитать ROAS в SQL
- Email маркетинг для аналитика
FAQ
Какой Open Rate считается ok?
B2C: 15-25% — норма, 30%+ — отлично. B2B: 20-30%.
С 2021 Open Rate стал unreliable?
Да. Apple MPP инфлирует. Используйте Click-Through Rate как leading indicator.
Subject line — главное?
Да. A/B-тесты subjects дают +10-30% Open Rate.
Best time to send?
Зависит от audience. B2B: Tuesday-Thursday 9-11 am. B2C: weekend / evenings.
CTR vs CTOR?
CTR = clicks / delivered. CTOR = clicks / opens. CTOR — content quality. CTR — overall funnel.