Quand tu bosses avec des bases de données, t’as souvent besoin de voir les données dans un certain ordre. Par exemple :
- « Montre-moi le top 10 des produits les plus chers. »
- « Quelles commandes ont été passées en dernier ? »
- « Quel est l’âge des élèves, du plus jeune au plus vieux ? »
Vouloir organiser les données, c’est normal : même si t’es un dev super balèze, fouiller dans un tas de lignes en vrac, c’est pas le kif. C’est pour ça que SQL nous file un outil pour trier les lignes dans le résultat — l’opérateur ORDER BY.
Bases du tri avec ORDER BY
ORDER BY, c’est un peu la baguette magique qui te permet de mettre de l’ordre dans les lignes du résultat. Sans lui, les données reviennent dans un ordre « aléatoire » (c’est pas un bug de la base, c’est juste que l’ordre n’est pas garanti).
Voilà à quoi ressemble la syntaxe de ORDER BY :
SELECT colonne1, colonne2
FROM table
ORDER BY colonne1 DESC;
colonne1: le nom de la colonne sur laquelle tu veux trier.ASC: tri croissant (c’est la valeur par défaut, donc tu peux la zapper).DESC: tri décroissant.
Exemple
Imaginons qu’on a une table students :
| id | name | age |
|---|---|---|
| 1 | Alex | 22 |
| 2 | Maria | 19 |
| 3 | Otto | 21 |
On va trier les étudiants par âge (ordre croissant) :
SELECT name, age
FROM students
ORDER BY age ASC;
Résultat :
| name | age |
|---|---|
| Maria | 19 |
| Otto | 21 |
| Alex | 22 |
Si tu changes la direction du tri pour décroissant :
SELECT name, age
FROM students
ORDER BY age DESC;
Le résultat sera :
| name | age |
|---|---|
| Alex | 22 |
| Otto | 21 |
| Maria | 19 |
Tri sur plusieurs colonnes
Parfois, une seule colonne ne suffit pas pour trier. Imagine qu’il y a plusieurs étudiants du même âge, et tu veux ajouter un tri supplémentaire, genre par nom.
Tri sur plusieurs colonnes :
SELECT colonne1, colonne2
FROM table
ORDER BY colonne1 DESC, colonne2 ASC;
Exemple pour la table suivante :
| id | name | age |
|---|---|---|
| 1 | Alex | 22 |
| 2 | Maria | 19 |
| 3 | Otto | 21 |
| 4 | Anna | 19 |
Requête :
SELECT name, age
FROM students
ORDER BY age ASC, name ASC;
Résultat :
| name | age |
|---|---|
| Anna | 19 |
| Maria | 19 |
| Otto | 21 |
| Alex | 22 |
Ici, d’abord on trie par âge (croissant), puis à l’intérieur de chaque âge, par nom dans l’ordre alphabétique.
Tri avec des alias
Si tu utilises des alias pour les colonnes, tu peux aussi trier par ces alias.
SELECT name AS "Nom", age AS "Âge"
FROM students
ORDER BY "Âge" DESC;
Résultat :
| Nom | Âge |
|---|---|
| Alex | 22 |
| Otto | 21 |
| Maria | 19 |
Pourquoi c’est important ? Parce qu’avant, c’était pas possible, et c’était galère de trier sur des colonnes calculées.
Tri avec des colonnes calculées
SQL te permet de faire des calculs direct dans la requête, puis de trier sur le résultat de ces calculs.
Exemple 1. Calcul tout simple
SELECT name, age, age * 2 AS age_doublé
FROM students
ORDER BY age_doublé DESC;
Résultat :
| name | age | age_doublé |
|---|---|---|
| Alex | 22 | 44 |
| Otto | 21 | 42 |
| Maria | 19 | 38 |
Exemple 2. Utilisation de fonctions. Imaginons qu’on stocke les prix des produits dans la table products :
| product_name | price |
|---|---|
| Produit A | 100 |
| Produit B | 200 |
| Produit C | 150 |
Et maintenant, on trie par le prix arrondi, multiplié par 0.9 (genre avec une remise). La fonction ROUND renvoie le nombre arrondi au chiffre après la virgule que tu veux.
SELECT product_name, price, ROUND(price * 0.9, 1) AS prix_remisé
FROM products
ORDER BY prix_remisé ASC;
Voilà le résultat :
| product_name | price | prix_remisé |
|---|---|---|
| Produit A | 100 | 90 |
| Produit C | 150 | 135 |
| Produit B | 200 | 180 |
Utilisation pratique du tri
Le tri joue un rôle clé dans ces cas :
- Faire des rapports, genre le top 10 des meilleures ventes du mois.
- Afficher des données dans les interfaces utilisateurs, par exemple une liste de commandes triée par date.
- Générer des listes pour l’analytics, genre mettre en avant des groupes par priorité.
Erreurs fréquentes avec ORDER BY
Les pièges sont partout. Voilà quelques trucs à surveiller :
- Si tu essaies de trier sur une colonne qui existe pas, tu vas avoir une erreur :
colonne "not_a_column" n’existe pas. - Le tri sur un alias utilisé dans une colonne calculée peut être chelou si l’alias est défini à un niveau supérieur.
- Si tu oublies de préciser la direction du tri, PostgreSQL va mettre
ASCpar défaut. C’est pas une erreur, mais ça peut donner des résultats inattendus.
Maintenant tu sais comment gérer le tri dans PostgreSQL avec ORDER BY. Retiens que des données bien organisées, c’est déjà la moitié du taf pour faire des requêtes SQL efficaces. Allez, on passe à la suite ! 😉
GO TO FULL VERSION