Эта ошибка возникает из-за того, что за указанный период не было флагов спама от @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 -- ID для спама (Пометить как спам и скрыть сообщение)
AND r.created_at BETWEEN :start_date AND :end_date
AND r.status IN (1, 2) -- Принятые и отклонённые флаги
AND r.created_by_id = -1 -- ID системного пользователя