Счетчики значков пользователей с фильтром по названию значка

Вот слегка изменённая версия этого запроса, добавляющая фильтр 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