השגיאה הזו מתרחשת מכיוון שלא היו דגלי ספאם על ידי @system שהסכמת או לא הסכמת איתם במהלך טווח הזמן הזה.
השאילתה מנסה לחלק את מספר הדגלים הכולל העומדים בתנאים. במקרה שלך זה 0, אז זה נשבר.
אם אתה רוצה שהשאילתה עדיין תחזיר תוצאה, אתה יכול להשתמש ב- NULLIF כדי לבדוק זאת כדי לקבל NULL כשאין מה לחלק.
-- [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 -- מזהה עבור ספאם (סמן כספאם והסתר פוסט)
AND r.created_at BETWEEN :start_date AND :end_date
AND r.status IN (1, 2) -- דגלים שאושרו ונדחו
AND r.created_by_id = -1 -- מזהה משתמש מערכת