Aller au contenu

Manipulations & Expressions utiles

·2 mins·
SQL Formation
SQL - Cet article fait partie d'une série.
Partie 7: Cet article

🧪 Gestion des NULL : COALESCE, NULLIF, IS NULL
#

  • COALESCE(...) : retourne la première valeur non nulle

    SELECT COALESCE(email, telephone, 'Aucune info') AS contact
    FROM clients;
    

    Très utile pour gérer des champs manquants

  • NULLIF(a, b) : renvoie NULL si a = b

    SELECT NULLIF(montant, 0) AS montant_util
    FROM ventes;
    

    Pratique pour éviter les divisions par zéro (1 / NULLIF(x, 0))


🪢 Concaténation de chaînes (CONCAT, ||) et fonctions associées
#

  • CONCAT(...) (ou || selon SGBD)

    SELECT CONCAT(prenom, ' ', nom) AS nom_complet
    FROM utilisateurs;
    

    ou (dans PostgreSQL, SQLite…) :

    SELECT prenom || ' ' || nom AS nom_complet
    FROM utilisateurs;
    
  • TRIM() : retire les espaces

  • UPPER() / LOWER() : majuscules / minuscules

  • SUBSTRING(champ FROM 1 FOR 3) ou SUBSTR(champ, 1, 3)


🧭 Expressions conditionnelles : CASE, IF
#

  • CASE WHEN ... THEN ... ELSE ... END

    SELECT
      CASE
        WHEN montant >= 1000 THEN 'premium'
        WHEN montant >= 500 THEN 'standard'
        ELSE 'basique'
      END AS categorie
    FROM commandes;
    

    Puissant pour créer des variables catégorielles à partir de règles


🔁 Rappels : LAG, LEAD, FIRST_VALUE
#

Ces fonctions sont parfaites pour manipuler des historiques :

SELECT
  date,
  montant,
  montant - LAG(montant) OVER (ORDER BY date) AS evolution
FROM ventes;

🎲 Manipulations diverses
#

FonctionUsageExemple
ROUND(valeur, 2)ArrondirROUND(prix, 2)
CAST(x AS INTEGER)Convertir un typeCAST('123' AS INTEGER)
GREATEST(a, b) / LEAST(a, b)Max / Min entre colonnesGREATEST(prix_ht, prix_remise)

🏋️‍♂️ Entraînement
#

  • Concaténer prénom et nom, en mettant le résultat en majuscules
  • Créer une variable niveau_client selon le montant total des commandes
  • Utiliser COALESCE pour combler les adresses mail manquantes par un champ téléphone
  • Calculer la différence de montant entre chaque ligne et la précédente (LAG)
duckdb.sql("""
SELECT *,
  COALESCE(email, telephone, 'Aucun contact') AS contact_util,
  UPPER(CONCAT(prenom, ' ', nom)) AS identite,
  montant - LAG(montant) OVER (ORDER BY date_commande) AS evolution
FROM clients;
""").df()

📚 Ressources utiles
#

Thibault CLEMENT - Intechnia
Auteur
Thibault CLEMENT - Intechnia
Data scientist
SQL - Cet article fait partie d'une série.
Partie 7: Cet article