Database
 sql >> Database >  >> RDS >> Database

Come ordinare per conteggio in SQL?

Problema:

Hai aggregato i dati in gruppi, ma desideri ordinare i record in ordine decrescente in base al numero di elementi nei gruppi.

Esempio:

Il nostro database ha una tabella denominata user con i dati nelle seguenti colonne:id , first_name , last_name e country .

id nome cognome paese
1 Lisa Williams Inghilterra
2 Gary Anders Polonia
3 Tom Williams Polonia
4 Michele Marrone Francia
5 Susana Fabio Stati Uniti
6 Anna Jones Stati Uniti
7 Elli Mugnaio Polonia

Creiamo un report sui nostri utenti. Raggrupperemo i risultati per country e contare il numero di utenti di ogni paese. Ma ordineremo anche i gruppi in ordine decrescente in base al numero di utenti. In questo modo, i paesi con il maggior numero di utenti verranno visualizzati in alto.

Soluzione:

SELECT country,
 COUNT(id) 
FROM user
GROUP BY  country
ORDER BY COUNT(id) DESC ;
paese count(id)
Polonia 3
USA 2
Inghilterra 1
Francia 1

Discussione:

Per ordinare i record selezionati in base al numero degli elementi in ciascun gruppo, utilizzare il ORDER BY clausola.

Il primo passo è usare il GROUP BY clausola per creare i gruppi (nel nostro esempio, raggruppiamo per country colonna). Quindi, nella clausola ORDER BY, utilizzi la funzione di aggregazione COUNT, che conta il numero di valori nella colonna di tua scelta; nel nostro esempio, contiamo ID distinti con COUNT(id) . Questo conta effettivamente il numero di elementi in ciascun gruppo. Il ORDER BY La clausola quindi ordina i gruppi in base a tale calcolo.

Come al solito, puoi utilizzare sia l'ordine crescente che quello decrescente con ORDER BY . Se vuoi un ordine decrescente (come in questo esempio), usa il DESC parola chiave. L'ordine crescente non richiede alcuna parola chiave perché è l'impostazione predefinita, ma puoi utilizzare l'ASC parola chiave se vuoi essere esplicito. Questo è lo stesso esempio ma con i risultati ordinati in ordine crescente:

Soluzione:

SELECT country,
 COUNT(id) 
FROM user
GROUP BY  country
ORDER BY COUNT(id);

Ecco il risultato:

paese count(id)
Inghilterra 1
Francia 1
USA 2
Polonia 3