Le tri et le formatage des données, c’est des skills super importants pour préparer des rapports lisibles, optimiser l’analyse de données et rendre l’expérience utilisateur plus cool. Tu vas t’en servir pour faire des rapports d’analyse, préparer des exports, et aussi dans le taf quotidien avec les bases de données. En vrai, tu vas souvent tomber sur des situations où il faut bien présenter les données, virer les doublons et trier les infos pour que ce soit plus clair. C’est exactement ce qu’on va faire aujourd’hui !
Exemple 1 : Créer une liste de clients uniques avec nom et prénom fusionnés, triée par nom de famille
On a une table customers où sont stockées les infos des clients :
| id | first_name | last_name | city |
|---|---|---|---|
| 1 | Alex | Lin | New York |
| 2 | Maria | Chi | Los Angeles |
| 3 | Alex | Lin | New York |
| 4 | Anna | Song | Chicago |
Notre objectif :
- Fusionner
first_nameetlast_namedans une seule colonnefull_name. - Extraire seulement les clients uniques.
- Trier la liste par nom de famille (
last_name).
Requête SQL
SELECT DISTINCT
CONCAT(first_name, ' ', last_name) AS full_name,
city
FROM customers
ORDER BY last_name;
| full_name | city |
|---|---|
| Maria Chi | Los Angeles |
| Alex Lin | New York |
| Anna Song | Chicago |
Fais gaffe, les doublons Alex Lin ont été supprimés grâce à DISTINCT, et la liste complète est triée par nom de famille dans l’ordre alphabétique.
Exemple 2 : Formatage des données de commandes et tri
Dans la table orders, on a les infos sur les commandes :
| order_id | customer_name | order_date | total_amount |
|---|---|---|---|
| 1 | Alex Lin | 2023-10-01 | 1500 |
| 2 | Maria Chi | 2023-10-02 | 2000 |
| 3 | Alex Lin | 2023-10-03 | 1500 |
| 4 | Anna Song | 2023-10-04 | 3000 |
Notre objectif :
- Créer une colonne
formatted_order_dateoù la date de commande sera au format JJ-MM-AAAA. - Supprimer les doublons de client et de date (garder les combinaisons uniques
customer_nameetorder_date). - Trier les commandes par date décroissante.
- Requête SQL
SELECT DISTINCT
customer_name,
TO_CHAR(order_date, 'DD-MM-YYYY') AS formatted_order_date,
total_amount
FROM orders
ORDER BY order_date DESC;
Résultat :
| customer_name | formatted_order_date | total_amount |
|---|---|---|
| Anna Song | 04-10-2023 | 3000 |
| Alex Lin | 03-10-2023 | 1500 |
| Maria Chi | 02-10-2023 | 2000 |
Regarde comment avec la fonction TO_CHAR() on a transformé la date au format DD-MM-YYYY, et grâce à DISTINCT on a viré les doublons.
Exemple 3 : Extraire les combinaisons uniques "prénom + nom" des étudiants et trier par nom de famille et date de naissance
Dans la table students, on a les infos sur les étudiants :
| student_id | first_name | last_name | birth_date |
|---|---|---|---|
| 1 | Alex | Lin | 2001-03-15 |
| 2 | Maria | Chi | 2000-06-20 |
| 3 | Alex | Lin | 2001-03-15 |
| 4 | Anna | Song | 1999-10-10 |
Notre objectif :
- Fusionner prénom et nom dans une seule colonne
full_name. - Extraire les combinaisons uniques "prénom + nom".
- Trier les étudiants par nom de famille, puis par date de naissance.
SELECT DISTINCT
CONCAT(first_name, ' ', last_name) AS full_name,
birth_date
FROM students
ORDER BY last_name, birth_date;
Résultat :
| full_name | birth_date |
|---|---|
| Maria Chi | 2000-06-20 |
| Alex Lin | 2001-03-15 |
| Anna Song | 1999-10-10 |
À noter : les deux lignes identiques pour l’étudiant "Alex Lin" ont été fusionnées en une seule, et le tri se fait d’abord par nom de famille, puis par date de naissance.
Exercice pratique
Utilise ce que tu as appris aujourd’hui pour résoudre ce petit défi :
Exercice : Tu as une table products qui contient les données suivantes :
| product_id | category | product_name | price |
|---|---|---|---|
| 1 | Électronique | Téléphone | 50000 |
| 2 | Vêtements | Veste | 8000 |
| 3 | Électronique | Ordinateur portable | 70000 |
| 4 | Vêtements | Veste | 8000 |
- Crée une colonne
formatted_productoùproduct_nameest fusionné avec la catégorie par un tiret, par exemple :Téléphone - Électronique. - Supprime les doublons de combinaison
product_nameetcategory. - Trie les produits par catégorie, puis par prix (du moins cher au plus cher).
Voici la structure de la requête pour faire l’exercice :
SELECT DISTINCT
CONCAT(product_name, ' - ', category) AS formatted_product,
price
FROM products
ORDER BY category, price ASC;
Essaie d’imaginer tout seul le résultat de cette requête !
L’utilisation des fonctions CONCAT(), DISTINCT et ORDER BY te permet d’avoir des données super lisibles et bien structurées, ce qui est ultra important dans les vrais projets et les tâches du quotidien. Assure-toi de bien piger comment les combiner en t’entraînant sur des exemples !
GO TO FULL VERSION