Dieser Fehler tritt auf, weil es im genannten Zeitraum keine Spam-Markierungen von @system gab, denen Sie zugestimmt oder widersprochen haben.
Die Abfrage versucht, durch die Gesamtzahl der Markierungen zu dividieren, die die Bedingungen erfüllen. In Ihrem Fall ist das 0, also geht es schief.
Wenn Sie möchten, dass die Abfrage trotzdem ein Ergebnis zurückgibt, können Sie NULLIF verwenden, um dies zu überprüfen, damit Sie NULL erhalten, wenn es nichts zu dividieren gibt.
-- [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 für Spam (Als Spam markieren und Beitrag ausblenden)
AND r.created_at BETWEEN :start_date AND :end_date
AND r.status IN (1, 2) -- Akzeptierte und abgelehnte Markierungen
AND r.created_by_id = -1 -- Systembenutzer-ID