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

So ordnen Sie Zeilen nach Gruppensumme in SQL

Problem:

Sie möchten Zeilen nach den Summen sortieren, die von einer Gruppe von Datensätzen generiert wurden.

Beispiel:

Unsere Datenbank hat eine Tabelle namens training mit Daten in vier Spalten:id , anmelden , Jahr , und Ergebnis .

id anmelden Jahr Ergebnis
1 Andy 2018 24
2 Lucy 2019 25
3 Andy 2019 20
4 Lucy 2018 16
5 Gary 2019 18
6 Gary 2018 19
7 Gary 2017 22
8 Lucy 2017 21
9 Andy 2017 26

Lassen Sie uns den Login-Namen jedes Spielers zusammen mit der Gesamtpunktzahl über alle Jahre abrufen, wobei die Aufzeichnungen nach den Gesamtpunktzahlen der Spieler in absteigender Reihenfolge angeordnet werden.

Lösung:

Wir verwenden den Operator ORDER BY, um Datensätze basierend auf der Aggregatfunktion SUM() zu ordnen , der die Gesamtpunktzahl für jeden Spieler über alle Jahre hinweg berechnet.

Hier ist die Abfrage, die Sie schreiben würden:

SELECT login,
  SUM(score) AS total_score
FROM training
GROUP BY login
ORDER BY SUM(score) DESC;

Hier ist das Ergebnis:

anmelden Gesamtpunktzahl
Andy 70
Lucy 62
Gary 59

Diskussion:

Verwenden Sie ORDER BY, wenn Sie Zeilen gemäß einem Wert anordnen möchten, der von einer Aggregatfunktion wie SUM() zurückgegeben wird . Auf den ORDER BY-Operator folgt die Aggregatfunktion (in unserem Beispiel SUM()). ). DESC wird nach dieser Funktion platziert, um eine absteigende Sortierreihenfolge anzugeben. Daher werden zuerst die höchsten aggregierten Werte angezeigt, dann werden zunehmend niedrigere Werte angezeigt. Um in aufsteigender Reihenfolge zu sortieren, können Sie ASC angeben oder einfach eines der Schlüsselwörter weglassen, da aufsteigend die Standardsortierreihenfolge ist.

In der obigen Abfrage wählen wir das Login jedes Spielers und die Summe seiner Punktzahl für alle Jahre aus. Diese Gesamtpunktzahl wird mithilfe von SUM() mit der Punktzahlspalte als Argument berechnet. Wir fügen einen Alias ​​für diesen Gesamtwert hinzu (SUM(score) AS total_score ); Sie können diesen Alias ​​anstelle der Aggregatfunktion in der ORDER BY-Klausel verwenden (ORDER BY total_score DESC ).

Beachten Sie, dass wir login einschließen in der GROUP BY. Wenn wir eine Spalte in SELECT aufnehmen, müssen wir die Spalte auch in GROUP BY verwenden. In diesem Beispiel verwenden wir die GROUP BY-Klausel, gefolgt von der Spalte login, da wir diese Spalte in SELECT einfügen. Beachten Sie, dass GROUP BY in der Abfrage vor ORDER BY steht.