🧪 Gestion des NULL : COALESCE, NULLIF, IS NULL#
COALESCE(...): retourne la première valeur non nulleSELECT COALESCE(email, telephone, 'Aucune info') AS contact FROM clients;Très utile pour gérer des champs manquants
NULLIF(a, b): renvoieNULLsia = bSELECT 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 espacesUPPER()/LOWER(): majuscules / minusculesSUBSTRING(champ FROM 1 FOR 3)ouSUBSTR(champ, 1, 3)
🧭 Expressions conditionnelles : CASE, IF#
CASE WHEN ... THEN ... ELSE ... ENDSELECT 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#
| Fonction | Usage | Exemple |
|---|---|---|
ROUND(valeur, 2) | Arrondir | ROUND(prix, 2) |
CAST(x AS INTEGER) | Convertir un type | CAST('123' AS INTEGER) |
GREATEST(a, b) / LEAST(a, b) | Max / Min entre colonnes | GREATEST(prix_ht, prix_remise) |
🏋️♂️ Entraînement#
- Concaténer prénom et nom, en mettant le résultat en majuscules
- Créer une variable
niveau_clientselon le montant total des commandes - Utiliser
COALESCEpour 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()