Problème :
Vous souhaitez trier les lignes en fonction des sommes générées par un groupe d'enregistrements.
Exemple :
Notre base de données contient une table nommée training
avec des données sur quatre colonnes :id , se connecter , année , et score .
identifiant | se connecter | année | score |
---|---|---|---|
1 | Andy | 2018 | 24 |
2 | Lucie | 2019 | 25 |
3 | Andy | 2019 | 20 |
4 | Lucie | 2018 | 16 |
5 | Gary | 2019 | 18 |
6 | Gary | 2018 | 19 |
7 | Gary | 2017 | 22 |
8 | Lucie | 2017 | 21 |
9 | Andy | 2017 | 26 |
Obtenons le nom de connexion de chaque joueur ainsi que la somme totale des scores sur toutes les années, en classant les enregistrements par ordre décroissant en fonction des scores totaux des joueurs.
Solution :
Nous utiliserons l'opérateur ORDER BY pour trier les enregistrements en fonction de la fonction d'agrégation SUM()
, qui calcule le score total de chaque joueur sur toutes les années.
Voici la requête que vous écririez :
SELECT login, SUM(score) AS total_score FROM training GROUP BY login ORDER BY SUM(score) DESC;
Voici le résultat :
connexion | total_score |
---|---|
Andy | 70 |
Lucie | 62 |
Gary | 59 |
Discussion :
Utilisez ORDER BY si vous souhaitez trier les lignes en fonction d'une valeur renvoyée par une fonction d'agrégation telle que SUM()
. L'opérateur ORDER BY est suivi de la fonction d'agrégation (dans notre exemple, SUM()
). DESC est placé après cette fonction pour spécifier un ordre de tri décroissant. Ainsi, les valeurs globales les plus élevées sont affichées en premier, puis les valeurs progressivement inférieures sont affichées. Pour trier dans l'ordre croissant, vous pouvez spécifier ASC ou simplement omettre l'un ou l'autre des mots clés, car l'ordre croissant est l'ordre de tri par défaut.
Dans la requête ci-dessus, nous sélectionnons le login de chaque joueur et la somme de leur score pour toutes les années. Ce score total est calculé à l'aide de SUM() avec la colonne score comme argument. Nous ajoutons un alias pour cette valeur agrégée (SUM(score) AS total_score
); vous pouvez utiliser cet alias à la place de la fonction d'agrégation dans la clause ORDER BY (ORDER BY total_score DESC
).
Notez que nous incluons login dans le GROUP BY. Si nous incluons une colonne dans SELECT, nous devons également utiliser la colonne dans GROUP BY. Dans cet exemple, nous utilisons la clause GROUP BY suivie de la colonne login car nous plaçons cette colonne dans le SELECT. Notez que GROUP BY est placé avant ORDER BY dans la requête.