Esta é uma consulta SQL do Explorador de Dados projetada para fornecer insights sobre a eficiência e a capacidade de resposta dos moderadores do fórum no tratamento de sinalizações levantadas por usuários em postagens.
Este relatório mostra uma contagem do número de sinalizações tratadas e o tempo médio para resolver sinalizações por cada moderador em um site, em um intervalo de datas especificado.
Compreender a rapidez e a eficácia com que os moderadores respondem às sinalizações pode ajudar os administradores a garantir que o fórum permaneça um espaço seguro e acolhedor para todos os usuários.
-- [params]
-- date :start_date = 2023-01-01
-- date :end_date = 2024-01-01
WITH period_actions AS (
SELECT pa.id,
pa.post_action_type_id,
pa.created_at,
pa.agreed_at,
pa.disagreed_at,
pa.deferred_at,
pa.agreed_by_id,
pa.disagreed_by_id,
pa.deferred_by_id,
pa.post_id,
pa.user_id,
COALESCE(pa.disagreed_at, pa.agreed_at, pa.deferred_at) AS responded_at,
EXTRACT(EPOCH FROM (COALESCE(pa.disagreed_at, pa.agreed_at, pa.deferred_at) - pa.created_at)) / 60 AS time_to_resolution_minutes -- tempo para resolução em minutos
FROM post_actions pa
WHERE pa.post_action_type_id IN (3,4,6,7,8) -- Tipos de sinalização
AND pa.created_at >= :start_date
AND pa.created_at <= :end_date
),
moderator_actions AS (
SELECT pa.id,
pa.post_id,
pa.created_at,
pa.responded_at,
pa.time_to_resolution_minutes,
COALESCE(pa.agreed_by_id, pa.disagreed_by_id, pa.deferred_by_id) AS moderator_id
FROM period_actions pa
WHERE COALESCE(pa.agreed_by_id, pa.disagreed_by_id, pa.deferred_by_id) IS NOT NULL
),
moderator_stats AS (
SELECT
m.moderator_id,
u.username AS moderator_username,
COUNT(m.id) AS handled_flags,
AVG(m.time_to_resolution_minutes) AS avg_resolution_time_minutes
FROM moderator_actions m
JOIN users u ON u.id = m.moderator_id
GROUP BY m.moderator_id, u.username
)
SELECT
ms.moderator_username,
ms.handled_flags,
ROUND(ms.avg_resolution_time_minutes::numeric, 2) AS avg_resolution_time_minutes
FROM moderator_stats ms
ORDER BY ms.handled_flags DESC, ms.avg_resolution_time_minutes ASC
Explicação da Consulta SQL
Parâmetros
A consulta usa dois parâmetros para definir o intervalo de datas para o qual os dados são analisados:
:start_date: A data de início do período que você deseja analisar, no formatoAAAA-MM-DD.:end_date: A data de término do período que você deseja analisar, também no formatoAAAA-MM-DD.
CTEs Explicadas
- period_actions: Esta CTE seleciona sinalizações levantadas dentro do período de tempo especificado, focando em tipos específicos de sinalização. Ela calcula o tempo levado para resolver cada sinalização (em minutos) desde o momento em que foi criada até ser aprovada, rejeitada ou adiada por um moderador.
- moderator_actions: Esta CTE filtra as ações de
period_actionspara incluir apenas aquelas que foram respondidas por um moderador. Ela identifica o moderador responsável por cada ação. - moderator_stats: Esta CTE agrega os dados de
moderator_actions, calculando o número total de sinalizações tratadas por cada moderador e o tempo médio de resolução (em minutos) para as sinalizações que eles trataram.
Resultados
A saída final da consulta fornece uma lista de moderadores classificados pelo número de sinalizações que eles trataram, com uma classificação secundária por seu tempo médio de resolução (em ordem crescente). Para cada moderador, o relatório mostra:
moderator_username: O nome de usuário do moderador.handled_flags: O número total de sinalizações tratadas pelo moderador dentro do período de tempo especificado.avg_resolution_time_minutes: O tempo médio levado pelo moderador para resolver uma sinalização, arredondado para duas casas decimais.
Resultados de Exemplo
| moderator_username | handled_flags | avg_resolution_time_minutes |
|---|---|---|
| Moderador1 | 343 | 39.41 |
| Moderador2 | 70 | 30.51 |
| Moderador3 | 63 | 42.21 |