Отчет по панели управления: пользователи по уровням доверия

Это 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
1 лайк