Это SQL-версия отчета по дашборду «Просмотры профиля пользователя».
Этот отчет по дашборду генерирует статистику общего количества просмотров профилей пользователей в день в указанном диапазоне дат.
-- [params]
-- date :start_date = 2024-01-05
-- date :end_date = 2024-02-06
WITH profile_views_per_day AS (
SELECT
date_trunc('day', viewed_at) AS day,
COUNT(*) AS views
FROM user_profile_views
WHERE viewed_at >= :start_date AND viewed_at <= :end_date
GROUP BY day
)
SELECT
day::date,
views
FROM profile_views_per_day
ORDER BY day
Пояснение к SQL-запросу
Ниже приведена расшифровка работы запроса:
- Параметры: Запрос принимает два параметра —
:start_dateи:end_date, которые позволяют пользователю указать диапазон дат для отчета. Оба параметра даты принимают форматYYYY-MM-DD. - Общее табличное выражение (CTE): Запрос начинается с CTE под названием
profile_views_per_day. Это временный набор результатов, который будет использоваться в основном запросе. - Обрезка даты: Внутри CTE функция
date_truncиспользуется для обрезки временной меткиviewed_atдо уровня дня. Это означает, что независимо от времени просмотра профиля, учет ведется только по дате. - Подсчет просмотров: Функция
COUNT(*)подсчитывает количество просмотров профиля для каждого дня. - Фильтрация по диапазону дат: Предложение
WHEREограничивает подсчет только просмотрами, произошедшими между параметрами:start_dateи:end_date, которые установлены в верхней части запроса. - Группировка результатов: Предложение
GROUP BYгруппирует результаты по обрезанному дню, чтобы подсчет просмотров агрегировался по дням. - Выборка результатов: Основной оператор
SELECTизвлекает результаты из CTE. Он выбирает обрезанный день (приведенный к типу date) и количество просмотров за этот день. - Сортировка результатов: Наконец, предложение
ORDER BYгарантирует, что результаты будут представлены в хронологическом порядке по дням.
Пример результатов
| day | views |
|---|---|
| 2024-01-05 | 263 |
| 2024-01-06 | 374 |
| 2024-01-07 | 272 |
| 2024-01-08 | 409 |
| 2024-01-09 | 606 |