SQL Dojo Bêta
Piège

Données sales

Un fichier mal fichu ne lève aucune erreur : chaque requête tourne, et les réponses sont fausses. Contrôlez une nouvelle table avant de lui faire confiance.

Ce qu'il faut chercher dans une nouvelle table :

  • Des nombres ou des dates en texte : ils se trient comme des mots ('99' > '138'). Vérifiez avec DESCRIBE, puis CAST ou TRY_CAST.
  • Les formats de tableur : 1 614,00 €, 03/04/2024. Retirez la devise et le séparateur de milliers ; lisez les dates avec strptime.
  • Les valeurs bouche-trou : 1900-01-01, -1, 0, 'N/A' pour dire « manquant ». Regardez les valeurs extrêmes et les plus fréquentes, puis NULLIF.
  • Vide n'est pas NULL : '' et ' ' comptent comme des valeurs. NULLIF(TRIM(x), '').
  • Les valeurs impossibles : un stock négatif, une remise de 140 %, un événement après le chargement. MIN, MAX et COUNT(*) - COUNT(colonne) sur chaque colonne les montrent.
  • Les clés presque identiques : une espace, une majuscule, un accent, et la jointure perd des lignes en silence. Comparez le nombre de lignes ; TRIM, LOWER.
  • Les doublons : une ligne importée deux fois, une personne sous deux orthographes.

Nettoyez une fois, là où les données arrivent, et mettez de côté les lignes que vous ne pouvez pas corriger (une table de quarantaine) au lieu de les supprimer.

Le piège

WITH stock(sku, quantity) AS (VALUES ('CAF-001', '99'), ('CAF-002', '138'), ('CAF-003', '7'))
SELECT MAX(quantity) AS biggest
FROM stock;
biggest
99
L’essayer en Randori

La correction

WITH stock(sku, quantity) AS (VALUES ('CAF-001', '99'), ('CAF-002', '138'), ('CAF-003', '7'))
SELECT MAX(CAST(quantity AS INTEGER)) AS biggest
FROM stock;
biggest
138
L’essayer en Randori