← Назад к вопросам

Расчёт MAU (Monthly Active Users)

2.2 Middle🔥 191 комментариев
#SQL и базы данных#Метрики и KPI

Условие

Дана таблица clients со следующей структурой:

  • client_id (INT) — идентификатор клиента
  • activity_date (DATE) — дата активности
  • app_name (VARCHAR) — название приложения

Напишите SQL-запрос для расчета MAU (Monthly Active Users) — количества уникальных активных пользователей приложения в месяц, усреднённого по всем месяцам.

Требования

  • Учитывать только уникальных пользователей за каждый месяц
  • Вывести среднее значение по всем месяцам

Пример данных

client_idactivity_dateapp_name
12024-01-05mobile
12024-01-10mobile
22024-01-15mobile
12024-02-01mobile

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение

MAU (Monthly Active Users) — это ключевая метрика для анализа активности приложения. Задача состоит из двух частей: сначала найти уникальных пользователей за каждый месяц, а затем вычислить среднее значение по всем месяцам.

Подход к решению

Этап 1: Группируем данные по месяцам и считаем уникальных пользователей в каждом месяце.

Этап 2: Вычисляем среднее значение MAU по всем месяцам.

SQL-запрос

WITH monthly_users AS (
  SELECT 
    DATE_TRUNC(month, activity_date) AS month,
    COUNT(DISTINCT client_id) AS mau
  FROM clients
  GROUP BY DATE_TRUNC(month, activity_date)
)
SELECT 
  ROUND(AVG(mau)::NUMERIC, 2) AS average_mau
FROM monthly_users;

Альтернативный вариант (для MySQL/SQLite)

Если используется MySQL или SQLite, можно применить функцию DATE_FORMAT:

WITH monthly_users AS (
  SELECT 
    DATE_FORMAT(activity_date, %Y-%m) AS month,
    COUNT(DISTINCT client_id) AS mau
  FROM clients
  GROUP BY DATE_FORMAT(activity_date, %Y-%m)
)
SELECT 
  ROUND(AVG(mau), 2) AS average_mau
FROM monthly_users;

Пошаговое объяснение

1. CTE (Common Table Expression) monthly_users

  • DATE_TRUNC(month, activity_date) — приводит все даты в месяце к первому дню месяца для группировки
  • COUNT(DISTINCT client_id) — считает уникальных клиентов (ключевой момент!)
  • GROUP BY DATE_TRUNC(...) — группирует по месяцам

2. Основной запрос

  • AVG(mau) — вычисляет среднее значение MAU по всем месяцам
  • ROUND(..., 2) — округляет до двух знаков после запятой
  • ::NUMERIC (PostgreSQL) — для корректного округления

Пример выполнения на данных из условия

Исходные данные:

  • Январь 2024: client_id 1, 2 → MAU = 2
  • Февраль 2024: client_id 1 → MAU = 1

Результат: (2 + 1) / 2 = 1.50 средний MAU

Важные моменты

DISTINCT — критически важен для подсчёта уникальных пользователей. Если один пользователь посещает приложение несколько раз в месяц, считаем его один раз

Группировка по месяцам — используем DATE_TRUNC или DATE_FORMAT в зависимости от СУБД

Средний MAU — позволяет оценить типичное количество активных пользователей в месяц

Настройка по app_name — если нужно, можно добавить WHERE app_name = mobile или групировать по приложениям:

WITH monthly_users AS (
  SELECT 
    app_name,
    DATE_TRUNC(month, activity_date) AS month,
    COUNT(DISTINCT client_id) AS mau
  FROM clients
  GROUP BY app_name, DATE_TRUNC(month, activity_date)
)
SELECT 
  app_name,
  ROUND(AVG(mau)::NUMERIC, 2) AS average_mau
FROM monthly_users
GROUP BY app_name;

Это позволит отследить MAU отдельно по каждому приложению.

Расчёт MAU (Monthly Active Users) | PrepBro