Este é um relatório de painel em SQL para a Proporção de Sinalização de Usuários.
Este relatório de painel gera uma lista de usuários ordenada pela proporção de respostas da equipe às suas sinalizações (concordadas e discordadas). O relatório inclui informações sobre a atividade de sinalização de cada usuário, focando especificamente no número de sinalizações que foram concordadas, discordadas ou ignoradas por moderadores, bem como uma pontuação calculada que representa o desempenho de sinalização do usuário.
O relatório é útil para administradores identificarem usuários que sinalizam conteúdo inadequado com precisão, avaliarem o envolvimento do usuário na moderação da comunidade, fornecerem feedback sobre práticas de sinalização e avaliarem o desempenho de sinalização do usuário para potenciais funções de moderador.
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2024-02-01
SELECT
u.id AS user_id,
u.username,
CASE
WHEN u.silenced_till IS NOT NULL THEN 't'
ELSE 'f'
END AS silenced,
SUM(CASE WHEN rs.status = 2 THEN 1 ELSE 0 END)::numeric AS disagreed_flags,
SUM(CASE WHEN rs.status = 1 THEN 1 ELSE 0 END)::numeric AS agreed_flags,
SUM(CASE WHEN rs.status = 3 THEN 1 ELSE 0 END)::numeric AS ignored_flags,
(
CASE
WHEN SUM(CASE WHEN rs.status = 2 THEN 1 ELSE 0 END)::numeric = 0 THEN
SUM(CASE WHEN rs.status = 1 THEN 1 ELSE 0 END)::numeric * SUM(CASE WHEN rs.status = 1 THEN 1 ELSE 0 END)::numeric
ELSE
ROUND(
(1 - (SUM(CASE WHEN rs.status = 1 THEN 1 ELSE 0 END)::numeric / SUM(CASE WHEN rs.status = 2 THEN 1 ELSE 0 END))) *
(SUM(CASE WHEN rs.status = 2 THEN 1 ELSE 0 END) - SUM(CASE WHEN rs.status = 1 THEN 1 ELSE 0 END)::numeric)
)
END
) AS score
FROM
users AS u
INNER JOIN reviewable_scores AS rs ON rs.user_id = u.id
WHERE
u.id > 0
AND rs.created_at >= :start_date
AND rs.created_at <= :end_date
GROUP BY
u.id,
u.username,
u.uploaded_avatar_id,
u.silenced_till
ORDER BY
score DESC
LIMIT 100
Explicação da Consulta SQL
Aqui está uma análise da consulta:
- Parâmetros: A consulta aceita dois parâmetros,
:start_datee:end_date, que permitem ao usuário especificar o intervalo de datas para o relatório. Ambos os parâmetros de data aceitam o formato de dataAAAA-MM-DD. - Cláusula SELECT: A consulta seleciona as seguintes colunas:
user_id: O identificador exclusivo do usuário.username: O nome de usuário do usuário.silenced: Um valor booleano indicando se o usuário está atualmente silenciado.disagreed_flags: O número total de sinalizações de usuários com as quais os moderadores discordaram.agreed_flags: O número total de sinalizações de usuários com as quais os moderadores concordaram.ignored_flags: O número total de sinalizações de usuários que foram ignoradas pelos moderadores.score: Uma pontuação calculada representando o desempenho de sinalização do usuário.
- Cláusula FROM: A consulta une a tabela
userscom a tabelareviewable_scoresnouser_idpara obter informações de sinalização relacionadas a cada usuário. - Cláusula WHERE: A consulta filtra os dados para incluir apenas os registros de usuários com um
idmaior que 0 e onde a datacreated_atdas pontuações revisáveis esteja dentro do intervalo de datas especificado. - Cláusula GROUP BY: A consulta agrupa os resultados por
user_id,username,uploaded_avatar_idesilenced_tillpara agregar os dados de sinalização de cada usuário. - Cláusula ORDER BY: A consulta ordena os resultados pela
scorecalculada em ordem decrescente para mostrar primeiro os usuários com o melhor desempenho de sinalização. - Cláusula LIMIT: A consulta limita os resultados aos 100 principais usuários com base na pontuação calculada.
Exemplo de Resultados
| user | username | silenced | disagreed_flags | agreed_flags | ignored_flags | score |
|---|---|---|---|---|---|---|
| user_1_id | user_1 | f | 0.0 | 10.0 | 3.0 | 100.0 |
| user_2_id | user_2 | f | 0.0 | 6.0 | 3.0 | 36.0 |
| user_3_id | user_3 | f | 0.0 | 4.0 | 0.0 | 16.0 |
| … | … | … | … | … | … | … |