يحدث هذا الخطأ لأنه لم تكن هناك علامات إبلاغ عن الرسائل غير المرغوب فيها بواسطة @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 -- معرّف مستخدم النظام