🧪 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 espaces -
UPPER()/LOWER(): majuscules / minuscules -
SUBSTRING(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()