Это SQL-версия отчета о росте уровня доверия.
Этот отчет подсчитывает количество пользователей, достигших уровней доверия 1, 2, 3 и 4 в каждый день в указанном диапазоне дат, и помогает администраторам отслеживать вовлеченность пользователей и их прогресс по уровням доверия в сообществе Discourse.
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2024-02-01
SELECT
date(created_at) AS date,
COUNT(*) FILTER (WHERE previous_value::integer < 1 AND new_value = '1') AS tl1_reached,
COUNT(*) FILTER (WHERE previous_value::integer < 2 AND new_value = '2') AS tl2_reached,
COUNT(*) FILTER (WHERE previous_value::integer < 3 AND new_value = '3') AS tl3_reached,
COUNT(*) FILTER (WHERE previous_value::integer < 4 AND new_value = '4') AS tl4_reached
FROM user_histories
WHERE created_at >= :start_date
AND created_at <= :end_date
AND (action = 2 OR action = 15)
GROUP BY date(created_at)
ORDER BY date(created_at)
Пояснение к SQL-запросу
Запрос работает путем выбора записей из таблицы user_histories, которая регистрирует изменения состояний пользователей, включая их уровни доверия.
Ниже приведена расшифровка запроса:
- Параметры даты: Запрос принимает два параметра,
:start_dateи:end_date, которые определяют диапазон дат для отчета. Оба параметра даты принимают форматГГГГ-ММ-ДД. date(created_at) AS date: Эта часть оператора SELECT извлекает дату из временной меткиcreated_atи помечает её как «date» для каждой записи. Это будет использоваться для группировки результатов по дням.COUNT(*) FILTER (WHERE previous_value::integer < X AND new_value = 'Y') AS tlY_reached: Этот раздел подсчитывает количество пользователей, перешедших на определенный уровень доверия (Y) с более низкого уровня (меньше X). Ключевое словоFILTERиспользуется для включения только строк, удовлетворяющих указанному условию. Приведение::integerиспользуется для преобразованияprevious_valueв целое число для сравнения. Существует четыре таких столбца подсчета, по одному для каждого уровня доверия от 1 до 4.FROM user_histories: Указывает таблицу, из которой извлекаются данные.WHERE created_at >= :start_date AND created_at <= :end_date: Фильтрует записи, включая только те, которые находятся в указанном диапазоне дат.AND (action = 2 OR action = 15): Фильтрует записи, включая только те, где действие указывает на изменение уровня доверия. Конкретные действия, соответствующие изменениям уровня доверия, представлены числами 2 и 15.GROUP BY date(created_at): Группирует результаты по дате, чтобы вы получили подсчет изменений уровня доверия для каждого дня в указанном диапазоне.ORDER BY date(created_at): Сортирует результаты в хронологическом порядке по дате.
Пример результатов
| date | tl1_reached | tl2_reached | tl3_reached | tl4_reached |
|---|---|---|---|---|
| 2024-01-01 | 1 | 3 | 1 | 0 |
| 2024-01-02 | 5 | 1 | 0 | 1 |
| 2024-01-03 | 8 | 2 | 3 | 0 |
| … | … | … | … | …"} |