Este es una versión SQL del Informe del Panel para la Relación de Señalamiento de Usuarios.
Este informe del panel genera una lista de usuarios ordenados por la relación de respuestas del personal a sus señalamientos (acordados y en desacuerdo). El informe incluye información sobre la actividad de señalamiento de cada usuario, centrándose específicamente en el número de señalamientos que fueron acordados, en desacuerdo o ignorados por los moderadores, así como una puntuación calculada que representa el rendimiento de señalamiento del usuario.
El informe es útil para que los administradores identifiquen a los usuarios que señalan con precisión el contenido inapropiado, midan la participación del usuario en la moderación comunitaria, proporcionen comentarios sobre las prácticas de señalamiento y evalúen el rendimiento de señalamiento del usuario para posibles roles 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
Explicación de la Consulta SQL
Aquí hay un desglose de la consulta:
- Parámetros: La consulta acepta dos parámetros,
:start_datey:end_date, que permiten al usuario especificar el rango de fechas para el informe. Ambos parámetros de fecha aceptan el formato de fechaYYYY-MM-DD. - Cláusula SELECT: La consulta selecciona las siguientes columnas:
user_id: El identificador único del usuario.username: El nombre de usuario del usuario.silenced: Un valor booleano que indica si el usuario está actualmente silenciado.disagreed_flags: El número total de señalamientos de usuario con los que los moderadores no estuvieron de acuerdo.agreed_flags: El número total de señalamientos de usuario con los que los moderadores estuvieron de acuerdo.ignored_flags: El número total de señalamientos de usuario que los moderadores ignoraron.score: Una puntuación calculada que representa el rendimiento de señalamiento del usuario.
- Cláusula FROM: La consulta une la tabla
userscon la tablareviewable_scoresenuser_idpara obtener información de señalamiento relacionada con cada usuario. - Cláusula WHERE: La consulta filtra los datos para incluir solo los registros de usuarios con un
idmayor que 0 y donde la fechacreated_atde las puntuaciones revisables esté dentro del rango de fechas especificado. - Cláusula GROUP BY: La consulta agrupa los resultados por
user_id,username,uploaded_avatar_idysilenced_tillpara agregar datos de señalamiento para cada usuario. - Cláusula ORDER BY: La consulta ordena los resultados por la
scorecalculada en orden descendente para mostrar primero a los usuarios con el mayor rendimiento de señalamiento. - Cláusula LIMIT: La consulta limita los resultados a los 100 usuarios principales según la puntuación calculada.
Ejemplo de Resultados
| usuario | 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 |
| … | … | … | … | … | … | … |