Problema:
Vorresti ordinare le righe in base alle somme generate da un gruppo di record.
Esempio:
Il nostro database ha una tabella denominata training
con i dati in quattro colonne:id , accedi , anno e punteggio .
id | accesso | punteggio | |
---|---|---|---|
1 | Andy | 2018 | 24 |
2 | Lucia | 2019 | 25 |
3 | Andy | 2019 | 20 |
4 | Lucia | 2018 | 16 |
5 | Gary | 2019 | 18 |
6 | Gary | 2018 | 19 |
7 | Gary | 2017 | 22 |
8 | Lucia | 2017 | 21 |
9 | Andy | 2017 | 26 |
Otteniamo il nome di accesso di ogni giocatore insieme alla somma totale dei punteggi in tutti gli anni, mettendo i record in ordine decrescente in base ai punteggi totali dei giocatori.
Soluzione:
Useremo l'operatore ORDER BY per ordinare i record in base alla funzione aggregata SUM()
, che calcola il punteggio totale di ogni giocatore in tutti gli anni.
Ecco la domanda che scriveresti:
SELECT login, SUM(score) AS total_score FROM training GROUP BY login ORDER BY SUM(score) DESC;
Ecco il risultato:
accesso | punteggio_totale |
---|---|
Andy | 70 |
Lucia | 62 |
Gary | 59 |
Discussione:
Usa ORDER BY se vuoi ordinare le righe in base a un valore restituito da una funzione aggregata come SUM()
. L'operatore ORDER BY è seguito dalla funzione aggregata (nel nostro esempio, SUM()
). DESC viene posizionato dopo questa funzione per specificare un ordinamento decrescente. Pertanto, vengono visualizzati prima i valori aggregati più elevati, quindi vengono visualizzati i valori progressivamente inferiori. Per ordinare in ordine crescente, puoi specificare ASC o semplicemente omettere una delle parole chiave, poiché l'ordinamento predefinito è crescente.
Nella query sopra, selezioniamo il login di ogni giocatore e la somma del suo punteggio per tutti gli anni. Questo punteggio totale viene calcolato utilizzando SUM() con la colonna del punteggio come argomento. Aggiungiamo un alias per questo valore aggregato (SUM(score) AS total_score
); puoi usare questo alias invece della funzione aggregata nella clausola ORDER BY (ORDER BY total_score DESC
).
Nota che includiamo accesso nel GRUPPO BY. Se includiamo una colonna in SELECT, dobbiamo utilizzare anche la colonna in GROUP BY. In questo esempio, utilizziamo la clausola GROUP BY seguita dalla colonna login perché inseriamo questa colonna in SELECT. Si noti che GROUP BY viene inserito prima di ORDER BY nella query.