Cette erreur se produit parce qu’il n’y a eu aucun signalement de spam par @system avec lequel vous étiez d’accord ou en désaccord pendant cette période.
La requête essaie de diviser par le nombre total de signalements qui remplissent les conditions. Dans votre cas, c’est 0, donc ça casse.
Si vous voulez que la requête renvoie toujours un résultat, vous pouvez utiliser NULLIF pour vérifier cela afin d’obtenir NULL lorsqu’il n’y a rien à diviser.
-- [params]
-- date :start_date = 2025-01-01
-- date :end_date = 2025-05-30
SELECT
COUNT(*) AS total_flags,
COUNT(*) FILTER (WHERE r.status = 1) AS approved_flags,
COUNT(*) FILTER (WHERE r.status = 2) AS rejected_flags,
ROUND(100.0 * COUNT(*) FILTER (WHERE r.status = 1) / NULLIF(COUNT(*), 0), 2) AS approved_percentage,
ROUND(100.0 * COUNT(*) FILTER (WHERE r.status = 2) / NULLIF(COUNT(*), 0), 2) AS rejected_percentage
FROM
reviewables r
JOIN
post_actions pa ON pa.post_id = r.target_id AND r.target_type = 'Post'
WHERE
pa.post_action_type_id = 8 -- ID pour spam (Signaler comme spam et masquer le message)
AND r.created_at BETWEEN :start_date AND :end_date
AND r.status IN (1, 2) -- Signalements acceptés et rejetés
AND r.created_by_id = -1 -- ID de l'utilisateur système