Comptes d'insignes d'utilisateur avec filtre par nom d'insigne

Comment puis-je filtrer une badge spécifique ? J’ai besoin de compter combien de fois elle a été obtenue.
Par exemple, pour le badge “howto writer”, je veux savoir qui a écrit le plus de howtos et établir un classement.

Une idée ? J’ai essayé d’ajouter une ligne
AND b.id = 136

Mais ça ne fonctionne pas.

Voici une version légèrement modifiée de cette requête qui ajoute un filtre badge name. Par défaut, badge name vaut 'all badges'. Lorsque cette valeur est définie, les résultats pour tous les badges sont renvoyés. Si vous définissez badge name sur le nom d’un badge spécifique, seuls les résultats pour ce badge seront renvoyés.

-- [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

C’est tout :slight_smile: Merci beaucoup