Qualcuno ha già scritto una query SQL per visualizzare un elenco di utenti (magari i primi 10), ordinato in base al numero totale di badge posseduti?
Ho dato un’occhiata nel Data Explorer alla tabella “user_badges” e ho notato che ci sono le colonne “user_id” e “badge_id”, ma non sono abbastanza esperto in SQL da poter eseguire una query di conteggio o di join per generare una classifica dei primi dieci.
-- [params]
-- int :posts = 100
-- int :top = 10
SELECT u.username, count(ub.id) as "Badges"
FROM user_badges ub, users u, user_stats us
WHERE u.id = ub.user_id
AND u.id = us.user_id
AND us.post_count > :posts
AND (u.admin = 'f' AND u.moderator = 'f')
GROUP BY u.username
ORDER BY count(ub.id) desc
LIMIT :top
Sì. Molti badge offrono la possibilità di essere vinti più di una volta.
Controlla questa versione se è più accurata:
-- [params]
-- int :posts = 100
-- int :top = 10
SELECT u.username, count(ub.id) as "Badges"
FROM user_badges ub, users u, user_stats us, badges b
WHERE u.id = ub.user_id
AND u.id = us.user_id
AND b.id = ub.badge_id
AND us.post_count > :posts
AND (u.admin = 'f' AND u.moderator = 'f')
AND b.multiple_grant = 'f'
GROUP BY u.username
ORDER BY count(ub.id) desc
LIMIT :top