Vous avez besoin de classer des données dans une base de données ? Vous voulez afficher des résultats du plus grand au plus petit ou de Z à A ? C’est une des opérations les plus courantes en SQL.
Cet article vous explique comment utiliser la commande ORDER BY DESC pour trier n’importe quel résultat par ordre décroissant. On va voir la syntaxe, des exemples simples et des cas plus complexes.
Qu’est-ce que la clause ORDER BY en SQL ?
En SQL, la clause ORDER BY sert à trier le jeu de résultats d’une requête SELECT. Vous pouvez l’utiliser sur une ou plusieurs colonnes. C’est la commande à placer tout à la fin de votre requête pour organiser l’affichage final des données.
Cette clause fonctionne avec deux mots-clés qui indiquent la direction du tri :
ASC: pour un tri par ordre ascendant (du plus petit au plus grand, de A à Z).DESC: pour un tri par ordre décroissant (du plus grand au plus petit, de Z à A).
Point important : Si vous n’utilisez ni ASC ni DESC, le système appliquera un tri par ASC par défaut. Pour un tri décroissant, vous devez obligatoirement spécifier DESC.
Syntaxe de la commande ORDER BY [ASC | DESC]
La syntaxe de ORDER BY est simple. Elle se place toujours après les clauses SELECT et FROM (et WHERE s’il y en a une).
Syntaxe pour une seule colonne
Pour trier les résultats sur une seule colonne, la structure de la requête SQL est la suivante.
SELECT colonne1, colonne2, ...
FROM nom_de_la_table
ORDER BY colonne_a_trier DESC;
Ici, les résultats de la requête seront triés en fonction des valeurs de la `colonne_a_trier`, dans un ordre décroissant.
Syntaxe pour plusieurs colonnes
Il est aussi possible de trier sur plusieurs colonnes. La base de données trie d’abord selon la première colonne, puis, pour les lignes ayant la même valeur dans cette première colonne, elle utilise la deuxième colonne pour affiner le tri.
SELECT colonne1, colonne2, ...
FROM nom_de_la_table
ORDER BY colonne1 DESC, colonne2 ASC;
Dans cet exemple, le tri se fait d’abord sur la `colonne1` par ordre décroissant (DESC), puis sur la `colonne2` par ordre ascendant (ASC).
Exemples pratiques de tri avec ORDER BY DESC
Le meilleur moyen de comprendre est de voir des exemples. Imaginons que nous avons une table nommée `Produits` avec les données suivantes :
| id | nom_produit | prix | date_ajout |
|---|---|---|---|
| 1 | Clavier | 75 | 2023-01-15 |
| 2 | Souris | 25 | 2023-03-22 |
| 3 | Écran | 300 | 2022-11-10 |
| 4 | Webcam | 75 | 2023-04-01 |
| 5 | Casque | 120 | 2023-02-05 |
Trier une colonne numérique par ordre décroissant (ex: par prix)
On veut afficher les produits du plus cher au moins cher. Pour ça, on va trier la colonne `prix` par ordre décroissant avec `DESC`.
La requête SQL ressemble à ça :
SELECT nom_produit, prix
FROM Produits
ORDER BY prix DESC;
Le résultat de la requête sera le suivant, avec les produits classés du prix le plus élevé au plus bas.
| nom_produit | prix |
|---|---|
| Écran | 300 |
| Casque | 120 |
| Clavier | 75 |
| Webcam | 75 |
| Souris | 25 |
Vous pouvez tester cette requête vous-même pour voir le résultat en direct.
Trier une colonne texte par ordre alphabétique inversé (Z-A)
Maintenant, on veut classer les produits par nom, mais dans l’ordre alphabétique inversé (de Z à A). La logique est la même : on utilise ORDER BY DESC sur la colonne `nom_produit`.
Voici la requête :
SELECT nom_produit, prix
FROM Produits
ORDER BY nom_produit DESC;
Le résultat trie les noms de produits de Z vers A. La webcam apparaît en premier, et le casque en dernier.
| nom_produit | prix |
|---|---|
| Webcam | 75 |
| Souris | 25 |
| Écran | 300 |
| Clavier | 75 |
| Casque | 120 |
Trier sur plusieurs colonnes en combinant DESC et ASC
Un cas d’usage courant est le tri sur plusieurs colonnes. Imaginons que l’on veuille classer nos produits par `prix` (décroissant), mais que pour les produits ayant le même prix, on veuille les classer par `nom_produit` (croissant, de A à Z).
La requête SQL combine DESC et ASC :
SELECT nom_produit, prix
FROM Produits
ORDER BY prix DESC, nom_produit ASC;
Dans le résultat, on voit bien que le Clavier et la Webcam, qui coûtent tous les deux 75, sont maintenant triés par ordre alphabétique : Clavier avant Webcam.
| nom_produit | prix |
|---|---|
| Écran | 300 |
| Casque | 120 |
| Clavier | 75 |
| Webcam | 75 |
| Souris | 25 |
Points d’attention et erreurs courantes
Utiliser ORDER BY DESC est simple, mais quelques erreurs fréquentes peuvent arriver. Voici une liste pour les éviter.
- Oublier le mot-clé
DESC: C’est l’erreur la plus courante. Si vous ne mettez rien, le tri sera ascendant (ASC) par défaut. Vous n’obtiendrez donc pas l’ordre décroissant attendu. - Mauvais positionnement de la clause :
ORDER BYdoit toujours être placée après les clausesWHEREouGROUP BY. Si vous la mettez avant, votre requête SQL générera une erreur. - Trier sur le mauvais alias ou la mauvaise colonne : Vérifiez bien que le nom de la colonne que vous utilisez dans
ORDER BYest correct. Une faute de frappe est vite arrivée. - Confondre tri numérique et alphabétique : Si vous stockez des nombres dans une colonne de type texte (VARCHAR), le tri sera alphabétique (« 10 » viendra avant « 2 »). Assurez-vous que vos colonnes ont le bon type de données.
FAQ – Questions fréquentes sur le tri en SQL
Quel est l’ordre de tri par défaut en SQL si rien n’est spécifié ?
L’ordre de tri par défaut est toujours ascendant (ASC). Si vous écrivez ORDER BY nom_colonne;, c’est équivalent à ORDER BY nom_colonne ASC;.
Peut-on trier les résultats par une colonne qui n’est pas dans le SELECT ?
Oui, c’est possible dans la plupart des systèmes de gestion de bases de données (SGBD). Par exemple, vous pouvez sélectionner uniquement le nom du produit mais trier par sa date d’ajout, même si cette date n’est pas affichée dans le résultat final.
Comment limiter le nombre de résultats après un tri ?
Pour limiter les résultats, vous pouvez utiliser la clause LIMIT (sur MySQL, PostgreSQL) ou TOP (sur SQL Server). Elle se place après la clause ORDER BY. Par exemple, pour obtenir les 3 produits les plus chers : ORDER BY prix DESC LIMIT 3;.
