Relatório do Painel - Usuários Por Tipo

Esta é uma versão SQL do Relatório de Painel para Usuários por Tipo.

Este relatório fornece uma contagem de usuários por funções e status específicos dentro de uma comunidade Discourse. Ele categoriza os usuários em quatro grupos distintos: Administradores, Moderadores, Suspensos e Silenciados. O objetivo deste relatório é dar aos gerentes da comunidade uma visão geral rápida da distribuição dos tipos de usuários e daqueles com acesso restrito devido a suspensão ou silenciamento.

SELECT "Type", "Count" FROM (
    SELECT 'Admin' AS "Type", COUNT(id) AS "Count", 1 rk FROM users WHERE admin = true AND id > 0
    UNION SELECT 'Moderator', COUNT(id), 2 FROM users WHERE moderator = true AND id > 0
    UNION SELECT 'Suspended', COUNT(id), 3 FROM users WHERE suspended_till > current_date
    UNION SELECT 'Silenced', COUNT(id), 4 FROM users WHERE silenced_till > current_date) AS data
ORDER BY rk

Explicação da Consulta SQL

  • A consulta cria uma tabela derivada data com três colunas: “Type”, “Count” e uma coluna de classificação rk para garantir que os resultados finais sejam ordenados logicamente (Administradores, Moderadores, Suspensos, Silenciados).
  • Para cada função ou status de usuário (Administrador, Moderador, Suspenso, Silenciado), uma instrução SELECT conta o número de usuários que correspondem aos critérios:
    • Administradores são identificados por admin = true.
    • Moderadores são identificados por moderator = true.
    • Usuários suspensos são aqueles com uma data suspended_till que está no futuro (suspended_till > current_date).
    • Usuários silenciados são aqueles com uma data silenced_till que está no futuro (silenced_till > current_date).
  • Cada instrução SELECT inclui uma classificação fixa (rk) para fins de ordenação.
  • O operador UNION é usado para combinar os resultados das quatro instruções SELECT em um único conjunto de resultados.
  • A instrução SELECT externa recupera então o “Type” e o “Count” da tabela derivada e ordena os resultados pela coluna rk.

Exemplo de Resultados

Type Count
Admin 14
Moderator 30
Suspended 3
Silenced 2
1 curtida