sql >> Database >  >> RDS >> Database

Hoe rijen te ordenen op groepssom in SQL

Probleem:

U wilt rijen rangschikken op basis van de sommen die zijn gegenereerd door een groep records.

Voorbeeld:

Onze database heeft een tabel met de naam training met gegevens in vier kolommen:id , aanmelden , jaar , en score .

id inloggen jaar score
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

Laten we de inlognaam van elke speler krijgen, samen met de totale som van de score over alle jaren, en de records in aflopende volgorde plaatsen op basis van de totale scores van de spelers.

Oplossing:

We gebruiken de operator ORDER BY om records te ordenen op basis van de aggregatiefunctie SUM() , die de totale score voor elke speler over alle jaren berekent.

Dit is de vraag die je zou schrijven:

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

Dit is het resultaat:

inloggen total_score
Andy 70
Lucy 62
Gary 59

Discussie:

Gebruik ORDER BY als u rijen wilt ordenen op basis van een waarde die wordt geretourneerd door een aggregatiefunctie zoals SUM() . De ORDER BY-operator wordt gevolgd door de aggregatiefunctie (in ons voorbeeld SUM() ). DESC wordt na deze functie geplaatst om een ​​aflopende sorteervolgorde te specificeren. De hoogste totaalwaarden worden dus eerst weergegeven, daarna worden geleidelijk lagere waarden weergegeven. Om in oplopende volgorde te sorteren, kunt u ASC specificeren of gewoon een van de trefwoorden weglaten, aangezien oplopend de standaard sorteervolgorde is.

In de bovenstaande zoekopdracht selecteren we de login van elke speler en de som van hun score voor alle jaren. Deze totale score wordt berekend met SUM() met de scorekolom als argument. We voegen een alias toe voor deze totale waarde (SUM(score) AS total_score ); u kunt deze alias gebruiken in plaats van de aggregatiefunctie in de ORDER BY-clausule (ORDER BY total_score DESC ).

Merk op dat we login . opnemen in de GROUP-BY. Als we een kolom in SELECT opnemen, moeten we ook de kolom in GROUP BY gebruiken. In dit voorbeeld gebruiken we de GROUP BY-component gevolgd door de kolom login omdat we deze kolom in de SELECT. Merk op dat GROUP BY vóór ORDER BY wordt geplaatst in de zoekopdracht.


  1. Hoe een variabele declareren in MySQL?

  2. Aangezien SQL Server geen pakketten heeft, wat doen programmeurs om dit te omzeilen?

  3. Een postgresql-sessie/verbinding beëindigen

  4. Waarom geeft SQL-server deze fout:Kan de waarde NULL niet invoegen in kolom 'id'?