Conteo de insignias de usuario con filtro de nombre

Aquí tienes una versión ligeramente modificada de esa consulta que añade un filtro de nombre de insignia. El nombre de insignia tiene como valor predeterminado 'todas las insignias'. Cuando se establece en ese valor, se devolverán resultados para todas las insignias. Si estableces el nombre de insignia en el nombre de una insignia específica, solo se devolverán los resultados para esa insignia.

-- [params]
-- int :posts = 1
-- int :top = 10
-- string :badge_name = todas las insignias

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 'todas las insignias' = :badge_name
            THEN true
        ELSE b.name = :badge_name
    END
GROUP BY u.username
ORDER BY badge_count DESC