Как посчитать Uninstalls в SQL
Содержание:
Зачем Uninstalls
Uninstall — самый чёткий сигнал «не понравилось». Если 50% installs делают uninstall в первую неделю — onboarding broken. Mobile uninstall rate — критическая метрика.
Формула
Uninstall Rate = uninstalls / installs × 100%Базовый расчёт
WITH stats AS (
SELECT
DATE_TRUNC('month', event_time) AS month,
COUNT(*) FILTER (WHERE event_type = 'install') AS installs,
COUNT(*) FILTER (WHERE event_type = 'uninstall') AS uninstalls
FROM app_events
WHERE event_time >= '2026-01-01'
GROUP BY 1
)
SELECT
month,
installs,
uninstalls,
uninstalls::NUMERIC * 100 / NULLIF(installs, 0) AS uninstall_rate_pct
FROM stats
ORDER BY month;Uninstall Rate by Cohort
Cohort-based shows когда uninstalls happen:
WITH cohort_installs AS (
SELECT
device_id,
DATE_TRUNC('week', event_time) AS install_week,
event_time AS install_time
FROM app_events
WHERE event_type = 'install'
),
uninstalls AS (
SELECT
device_id,
event_time AS uninstall_time
FROM app_events
WHERE event_type = 'uninstall'
)
SELECT
c.install_week,
COUNT(DISTINCT c.device_id) AS installs,
COUNT(DISTINCT CASE
WHEN u.uninstall_time <= c.install_time + INTERVAL '7 days'
THEN c.device_id
END) AS uninstalled_7d,
COUNT(DISTINCT CASE
WHEN u.uninstall_time <= c.install_time + INTERVAL '30 days'
THEN c.device_id
END) AS uninstalled_30d
FROM cohort_installs c
LEFT JOIN uninstalls u ON u.device_id = c.device_id
GROUP BY c.install_week
ORDER BY c.install_week;Time-to-Uninstall
WITH paired AS (
SELECT
i.device_id,
i.event_time AS install_time,
u.event_time AS uninstall_time,
EXTRACT(EPOCH FROM (u.event_time - i.event_time)) / 86400 AS days_to_uninstall
FROM app_events i
JOIN app_events u ON u.device_id = i.device_id
AND u.event_time > i.event_time
AND u.event_type = 'uninstall'
WHERE i.event_type = 'install'
)
SELECT
CASE
WHEN days_to_uninstall <= 1 THEN '< 1 day'
WHEN days_to_uninstall <= 7 THEN '1-7 days'
WHEN days_to_uninstall <= 30 THEN '8-30 days'
WHEN days_to_uninstall <= 90 THEN '31-90 days'
ELSE '90+ days'
END AS bucket,
COUNT(*) AS uninstalls
FROM paired
GROUP BY 1
ORDER BY 1;Если 60% uninstalls в первые 24 часа — onboarding bug.
Частые ошибки
Ошибка 1. Tracking uninstall. iOS / Android не сообщают uninstall в realtime. Используйте silent push detection (response timeout → uninstalled).
Ошибка 2. Reinstall. Юзер uninstall + install позже. Counts as 1 install or 2?
Ошибка 3. Cross-device. iPhone uninstalled, iPad still installed → не churn.
Ошибка 4. Включать crash как uninstall. Crash != uninstall. Разные events.
Ошибка 5. Period mismatch. Compare installs of month X with uninstalls of month X — но installs of month X могут uninstall позже.
Связанные темы
- Как посчитать installs в SQL
- Как посчитать D1/D7/D30 retention в SQL
- Как посчитать churn в SQL
- Как посчитать activation rate в SQL
FAQ
Какой Uninstall Rate considered ok?
D1: 30-50% — норма. D7: 50-70%. D30: 70-85%. Mobile сам по себе high churn.
Как обнаружить uninstall?
Silent push notification. If device не отвечает > 7 days — uninstalled.
Uninstall vs Inactive?
Uninstall — приложения нет. Inactive — есть, не используется. Inactive можно reactivate.
Top reasons for uninstall?
- Bad first impression (onboarding). 2) Storage cleanup. 3) Got replacement app. 4) Push spam.
Mobile vs web — uninstall rates?
В web нет uninstall — есть bounce. Mobile уникальна.