Как посчитать Uninstalls в SQL

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

Зачем 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;
Закрепи формулу uninstalls в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать uninstalls в Telegram

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 позже.

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

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?

  1. Bad first impression (onboarding). 2) Storage cleanup. 3) Got replacement app. 4) Push spam.

Mobile vs web — uninstall rates?

В web нет uninstall — есть bounce. Mobile уникальна.