Как посчитать WAU/MAU в SQL

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

Зачем WAU/MAU

WAU/MAU — habit для продуктов с weekly cadence (LinkedIn, Notion, Strava). Daily use unrealistic; weekly — true habit signal.

Формула

WAU/MAU = WAU / MAU × 100%

WAU = unique users за last 7 days. MAU = unique users за last 30 days.

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

WITH wau AS (
    SELECT COUNT(DISTINCT user_id) AS wau
    FROM activity
    WHERE DATE >= CURRENT_DATE - INTERVAL '7 days'
),
mau AS (
    SELECT COUNT(DISTINCT user_id) AS mau
    FROM activity
    WHERE DATE >= CURRENT_DATE - INTERVAL '30 days'
)
SELECT
    w.wau,
    m.mau,
    w.wau::NUMERIC * 100 / NULLIF(m.mau, 0) AS wau_mau_pct
FROM wau w, mau m;

Daily snapshot

WITH days AS (
    SELECT generate_series(
        CURRENT_DATE - INTERVAL '60 days',
        CURRENT_DATE,
        '1 day'::INTERVAL
    )::DATE AS d
)
SELECT
    d.d AS DATE,
    (SELECT COUNT(DISTINCT user_id) FROM activity WHERE DATE BETWEEN d.d - INTERVAL '6 days' AND d.d) AS wau,
    (SELECT COUNT(DISTINCT user_id) FROM activity WHERE DATE BETWEEN d.d - INTERVAL '29 days' AND d.d) AS mau
FROM days d;

(Heavy на large datasets — use materialized views в продакшене.)

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

По сегментам

SELECT
    u.country,
    COUNT(DISTINCT CASE WHEN a.DATE >= CURRENT_DATE - INTERVAL '7 days' THEN a.user_id END) AS wau,
    COUNT(DISTINCT a.user_id) AS mau,
    COUNT(DISTINCT CASE WHEN a.DATE >= CURRENT_DATE - INTERVAL '7 days' THEN a.user_id END)::NUMERIC * 100
    / NULLIF(COUNT(DISTINCT a.user_id), 0) AS wau_mau_pct
FROM activity a
JOIN users u ON u.user_id = a.user_id
WHERE a.DATE >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY u.country
ORDER BY wau_mau_pct DESC;

Когда использовать

Продукт Метрика habit
Messaging (WhatsApp) DAU/MAU
Social (Instagram) DAU/MAU
Productivity (Notion) WAU/MAU
Banking app WAU/MAU
Tax software Annual (год / quarter)

Daily habit — strict. Weekly — realistic для many products.

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

Ошибка 1. Apply DAU/MAU to weekly product. Notion DAU/MAU 15% звучит плохо. WAU/MAU 50% — true picture.

Ошибка 2. Window misalignment. WAU last 7 days, MAU last 28 days, или 30? Pick one и придерживайся.

Ошибка 3. DAU/WAU. Often missed. Show daily-among-weekly users.

Ошибка 4. Trends compare apples-oranges. WAU/MAU при growing user base — denominator растёт быстрее numerator → looks decline.

Ошибка 5. Cohort matters. New users have artificially high WAU/MAU (recently signed up). Strip.

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

FAQ

Какой WAU/MAU ok?

50%+ — strong habit. 30-50% — moderate. <20% — weak.

WAU/MAU vs DAU/MAU?

WAU/MAU relaxed for weekly products. DAU/MAU strict for daily products.

Both метрики track?

Yes. WAU/MAU stable + DAU/MAU growing = healthy.

When 7d vs 14d window?

7d — strict weekly. 14d — bi-weekly cadence (some B2B).

WAU/MAU growing — engagement up?

Маybe. But also could be MAU not growing (new users not coming).