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

Come ordinare le righe per somma di gruppo in SQL

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 .

anno
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.