Вот слегка изменённая версия этого запроса, добавляющая фильтр badge name. По умолчанию badge name равен 'all badges'. При таком значении будут возвращены результаты для всех бейджей. Если вы установите badge name в имя конкретного бейджа, будут возвращены только результаты для этого бейджа.
-- [params]
-- int :posts = 1
-- int :top = 10
-- string :badge_name = all badges
SELECT
username,
COUNT(ub.id) as badge_count
FROM user_badges ub
JOIN users u ON u.id = ub.user_id
JOIN user_stats us
ON us.user_id = ub.user_id
JOIN badges b ON b.id = ub.badge_id
WHERE us.post_count > :posts
AND (u.admin = 'f' AND u.moderator = 'f')
AND CASE
WHEN 'all badges' = :badge_name
THEN true
ELSE b.name = :badge_name
END
GROUP BY u.username
ORDER BY badge_count DESC