Voglio ottenere un elenco di “quanti utenti” hanno espresso “quanti voti”. Nella nostra istanza abbiamo un limite di 10 voti per persona. La tabella risultante sarebbe simile a questa:
Numero di voti
Numero di utenti
10
25
9
32
8
43
(ecc.)
Nel mio primo SQL in assoluto, sono arrivato fin qui:
SELECT user_id, count(user_id)
FROM discourse_voting_votes
GROUP BY user_id
ORDER BY count DESC
Questo produce un elenco di utenti ordinati per numero di voti espressi. Almeno con questo posso calcolare manualmente il risultato desiderato, ma è noioso e soggetto a errori.
Temo che questa sia anche la mia prima query SQL, quindi vedremo come andrà… ma questo è d’aiuto?
WITH votes AS (
SELECT user_id, count(user_id) as Number_of_Votes
FROM discourse_voting_votes dvv
WHERE dvv.archive = false
GROUP BY user_id
ORDER BY Number_of_Votes DESC
)
SELECT Number_of_Votes, count(*) AS Number_of_Users
FROM votes
GROUP BY Number_of_Votes
ORDER BY Number_of_Votes DESC
PERFETTO! Grazie mille! Per lo script e la piccola lezione di SQL. Spero che sia stato utile anche per te.
Scommetto che questa query sarà utile ad altri. Nel nostro caso, vogliamo mostrare questa distribuzione dei voti in modo che i nostri volontari possano essere più consapevoli di quanto / quanto poco stiano utilizzando i loro voti rispetto ad altri colleghi. L’obiettivo finale è aumentare il numero di voti utilizzati.
Sono davvero felice che abbia funzionato. Volevo fare pratica con il data explorer da un po’ e questa mi è sembrata un’opportunità perfetta, quindi in realtà dovrei ringraziare te.
Ho aggiunto la riga ‘archive = false’ per limitare i risultati al totale dei voti correnti dell’utente, e non includere quelli storici. Penso che sia corretto per il tuo caso d’uso, ma rimuovila se desideri un ‘totale generale’.