CodeGym /Cours /SQL SELF /Erreurs typiques lors du tri et du formatage des données

Erreurs typiques lors du tri et du formatage des données

SQL SELF
Niveau 6 , Leçon 4
Disponible

Le tri et le formatage, c’est logique et super utile. Mais parfois, tu peux vite t’emmêler les pinceaux et obtenir des résultats chelous. On va voir ensemble les erreurs les plus courantes pour que tes données soient toujours nickel et bien rangées !

1. Tri de données de types différents

Imagine : tu tries une table sur une colonne qui mélange des nombres et des chaînes de caractères. PostgreSQL va essayer de t’aider, mais le résultat peut te surprendre. Par exemple, tu as une table où value est du texte :

id value
1 10
2 2
3 apple
4 20

Et tu écris la requête :

SELECT *
FROM mixed_data 
ORDER BY value;

Résultat attendu ? Peut-être : 2, 10, 20, apple ? Nope, PostgreSQL trie les chaînes selon l’ordre alphabétique/lexicographique, donc tu auras : 10, 2, 20, apple.

Comment éviter l’erreur ?

Si tu sais que ta colonne texte contient des nombres, convertis-les explicitement en nombre avant de trier :

SELECT * FROM mixed_data ORDER BY value::INT;

Maintenant, le résultat sera : 2, 10, 20.

Mais fais gaffe : si tu as des chaînes qui ne peuvent pas être converties en nombre, ta requête va planter !

2. Spécifier plusieurs colonnes pour le tri

Une erreur classique : oublier la priorité des colonnes quand tu tries sur plusieurs colonnes. Par exemple, tu veux trier des étudiants par nom de famille puis par âge, mais tu inverses l’ordre :

id last_name age
1 Lin 18
2 Lin 20
3 Song 19

Ta requête :

-- Tri incorrect
SELECT * 
FROM students 
ORDER BY age, last_name;

Résultat :

id last_name age
1 Lin 18
3 Song 19
2 Lin 20

Ici, PostgreSQL trie d’abord par âge, puis par nom de famille. Pas vraiment ce que tu voulais, hein ?

La bonne requête :

SELECT *
FROM students 
ORDER BY last_name, age;

Résultat :

id last_name age
1 Lin 18
2 Lin 20
3 Song 19

Maintenant, le tri se fait d’abord par nom de famille, puis par âge à l’intérieur du même nom. C’est exactement ce qu’on voulait !

3. Tri avec des directions différentes

Parfois, tu veux trier avec des directions différentes pour chaque colonne. Genre, trier des produits par catégorie (croissant), puis par prix (décroissant) dans chaque catégorie. L’erreur, c’est d’oublier de préciser la direction pour la deuxième colonne :

id category price
1 Electronics 99.99
2 Electronics 199.99
3 Furniture 299.99
4 Furniture 199.99

Ta requête :

-- Tri incorrect
SELECT * 
FROM products 
ORDER BY category, price;

Résultat : les prix dans chaque catégorie sont triés par ordre croissant, alors que tu voulais sûrement l’inverse.

La bonne requête :

SELECT *
FROM products 
ORDER BY category ASC, price DESC;

Erreurs de formatage

4. Mauvaise utilisation de CONCAT()

Imaginons que tu veux fusionner le prénom et le nom dans une seule chaîne, mais tu oublies de mettre un espace entre les deux :

id first_name last_name
1 John Doe
2 Jane Smith

Ta requête :

SELECT
    CONCAT(first_name, last_name) AS full_name 
FROM employees;

Résultat :

full_name
JohnDoe
JaneSmith

Comment corriger ?

Ajoute un espace entre le prénom et le nom :

SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;

Maintenant, c’est bien plus joli :

full_name
John Doe
Jane Smith

5. Erreurs avec CAST()

Par exemple, tu veux convertir une date en texte pour l’afficher joliment, mais tu oublies de préciser le format :

id event_date
1 2023-01-15

Ta requête :

-- Conversion incorrecte
SELECT 
    CAST(event_date AS TEXT) 
FROM events;

Résultat : la date sera convertie au format YYYY-MM-DD, ce qui n’est pas toujours top pour tes utilisateurs.

Comment corriger ?

Utilise la fonction TO_CHAR() pour choisir le format :

SELECT
    TO_CHAR(event_date, 'DD-MM-YYYY') AS formatted_date 
FROM events;

Maintenant, la date s’affiche comme 15-01-2023.

6. Erreurs avec DISTINCT

DISTINCT est super pratique pour choper des valeurs uniques, mais parfois on s’en sert mal. Par exemple, tu veux la liste des prénoms uniques des employés :

SELECT DISTINCT first_name, last_name
FROM employees;

À première vue, la requête a l’air ok, mais si deux employés ont le même prénom et nom, ils seront affichés comme un seul résultat, même si ce sont des personnes différentes.

Exemple de données :

id first_name last_name
1 Alex Lin
2 Maria Chi
3 Alex Lin

Résultat de la requête :

first_name last_name
Alex Lin
Maria Chi

Comment éviter l’erreur ?

Ajoute la clé primaire pour garantir l’unicité :

SELECT DISTINCT ON (id) first_name, last_name
FROM employees;

Résultat de la requête avec DISTINCT ON (id) :

id first_name last_name
1 Alex Lin
2 Maria Chi
3 Alex Lin

Comment éviter les erreurs ?

Travailler avec les données, ça demande d’être attentif aux détails. Pour éviter les erreurs qu’on vient de voir :

Vérifie les types de données : assure-toi que les fonctions que tu utilises supportent bien les types de tes colonnes.

Vérifie l’ordre de tri : sois sûr que les colonnes sont dans le bon ordre. N’oublie pas les directions de tri ASC, DESC.

Teste tes requêtes sur des petits jeux de données : ça aide à repérer les bugs tôt.

N’oublie pas la doc PostgreSQL : elle répondra à toutes tes questions sur les fonctions et leur usage. Voilà le lien : doc officielle PostgreSQL.

Maintenant, t’es prêt à affronter toutes les galères de formatage et de tri ! On continue.

1
Étude/Quiz
Extraction des valeurs uniques, niveau 6, leçon 4
Indisponible
Extraction des valeurs uniques
Extraction des valeurs uniques
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION