Это SQL-версия отчёта панели управления по посещениям пользователей и посещениям пользователей (мобильные устройства).
Данный отчёт панели управления предоставляет информацию об вовлечённости пользователей, отслеживая ежедневные посещения. Администраторы могут фильтровать данные по диапазону дат, членству в группах и типу устройства (мобильное или нет).
Понимание паттернов посещений пользователей помогает администраторам принимать обоснованные решения для повышения вовлечённости пользователей и здоровья сообщества.
-- [params]
-- date :start_date = 2024-01-06
-- date :end_date = 2024-02-07
-- null text :group_name
-- boolean :mobile_views = false
SELECT uv.visited_at AS date,
COUNT(DISTINCT uv.user_id) AS visits_count
FROM user_visits uv
LEFT JOIN group_users gu ON gu.user_id = uv.user_id
LEFT JOIN groups g ON g.id = gu.group_id AND (:group_name IS NULL OR g.name = :group_name)
WHERE uv.visited_at BETWEEN :start_date AND :end_date
AND (:group_name IS NULL OR g.name IS NOT NULL)
AND (:mobile_views = false OR uv.mobile = true)
GROUP BY uv.visited_at
ORDER BY uv.visited_at ASC
Объяснение SQL-запроса
SQL-запрос работает путём выборки данных из таблицы user_visits, которая регистрирует каждое посещение пользователями платформы. Основные компоненты запроса объяснены ниже:
- Параметры
:start_dateи:end_dateопределяют диапазон дат для отчёта. Оба параметра даты принимают форматYYYY-MM-DD.:group_nameпозволяет фильтровать по имени конкретной группы пользователей. Если не указано, включаются данные по всем группам.:mobile_viewsопределяет, включать ли только посещения с мобильных устройств (true) или все посещения (false).
- Выборка данных и операции соединения:
- Запрос выбирает дату посещения (
visited_at) и подсчитывает уникальные идентификаторы пользователей (user_id) для вычисления количества уникальных посещений в день. - Выполняется
LEFT JOINс таблицейgroup_usersдля связывания посещений пользователей с их соответствующими группами, за которым следует ещё одинLEFT JOINс таблицейgroupsдля фильтрации по указанному имени группы, если оно задано.
- Запрос выбирает дату посещения (
- Фильтрация:
- Условие
WHEREприменяет фильтры на основе входных параметров:- Гарантируется, что включаются только посещения в указанном диапазоне дат.
- Выполняется фильтрация по имени группы, если оно указано, и обеспечивается подсчёт посещений для пользователей, входящих в эту группу.
- Включаются только мобильные посещения, если параметр
:mobile_viewsустановлен вtrue.
- Условие
- Группировка и сортировка:
- Запрос группирует результаты по дате посещения (
visited_at) для агрегации количества посещений в день. - Результаты сортируются в порядке возрастания по дате, обеспечивая хронологический просмотр посещений пользователей.
- Запрос группирует результаты по дате посещения (
Пример результатов
| date | visits_count |
|---|---|
| 2024-01-06 | 67 |
| 2024-01-07 | 71 |
| 2024-01-08 | 88 |
| 2024-01-09 | 79 |
| 2024-01-10 | 78 |
| … | … |