Это SQL-версия отчета панели управления по уровням доверия пользователей.
Этот отчет предоставляет обзор распределения уровней доверия пользователей в сообществе Discourse.
SELECT
CASE
WHEN trust_level = 0 THEN 'newuser'
WHEN trust_level = 1 THEN 'basic'
WHEN trust_level = 2 THEN 'member'
WHEN trust_level = 3 THEN 'regular'
WHEN trust_level = 4 THEN 'leader'
ELSE 'unknow'
END,
COUNT(users)
FROM users
WHERE
id > 0
AND NOT EXISTS(
SELECT 1
FROM anonymous_users a
WHERE a.user_id = users.id
)
GROUP BY trust_level
ORDER BY trust_level
Разбор запроса
- SELECT CASE: Эта часть запроса использует оператор
CASEдля присвоения понятного человеку имени каждому уровню доверия. Он преобразует числовое полеtrust_levelв строки, такие как «newuser», «basic», «member», «regular» и «leader», для удобства восприятия. - COUNT(users): Эта функция подсчитывает количество пользователей в каждом уровне доверия.
- FROM users: Запрос извлекает данные из таблицы
users, которая содержит все учетные записи пользователей в сообществе. - WHERE id > 0: Это условие гарантирует, что учитываются только реальные пользователи, исключая любые системные учетные записи, у которых может быть ID 0 или меньше.
- AND NOT EXISTS: Этот подзапрос исключает любых пользователей, помеченных как анонимные, путем проверки таблицы
anonymous_users. Если у пользователя есть запись в таблицеanonymous_users, он не включается в подсчет. - GROUP BY trust_level: Это предложение группирует результаты по уровню доверия, обеспечивая отдельный подсчет для каждого уровня.
- ORDER BY trust_level: Наконец, результаты сортируются по полю
trust_level, обеспечивая вывод от самого низкого уровня (newuser) до самого высокого (leader).
Пример результатов
| case | count |
|---|---|
| newuser | 1235 |
| basic | 234 |
| member | 345 |
| regular | 56 |
| leader | 23 |