Cet article s’adresse aux analystes, data engineers et développeurs qui maîtrisent déjà les bases de SQL et souhaitent passer au niveau supérieur. Nous allons couvrir, de manière structurée, progressive et simple, les concepts avancés indispensables pour écrire des requêtes SQL robustes, lisibles et performantes.

Les fonctions de fenêtrage permettent d’effectuer des calculs sur un ensemble de lignes sans les regrouper comme avec GROUP BY.
Une fonction de fenêtrage s’écrit avec la clause OVER().
1SELECT 2 client_id, 3 montant, 4 SUM(montant) OVER (PARTITION BY client_id) AS total_client 5FROM transactions; 6
👉 Ici, chaque ligne conserve son détail tout en affichant un total par client.
Ces fonctions sont utilisées pour produire des rapports de classement.
Attribue un numéro unique à chaque ligne.
ROW_NUMBER() OVER (ORDER BY montant DESC)
Génère un rang avec des sauts en cas d’égalité.
RANK() OVER (ORDER BY montant DESC)
Génère un rang sans saut.
DENSE_RANK() OVER (ORDER BY montant DESC)
| Besoin | Fonction |
|---|---|
| Numérotation stricte | ROW_NUMBER |
| Classement officiel | RANK |
| Classement compact | DENSE_RANK |
Les sommes cumulatives sont très utilisées en finance et reporting.
1SELECT 2 date_tx, 3 montant, 4 SUM(montant) OVER ( 5 ORDER BY date_tx 6 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 7 ) AS cumul_montant 8FROM transactions; 9
👉 Chaque ligne contient le total cumulé jusqu’à cette date.
La combinaison de GROUP BY et CASE WHEN permet de créer des indicateurs métiers.
1SELECT 2 pays, 3 COUNT(*) AS total_tx, 4 SUM(CASE WHEN statut = 'SUCCESS' THEN montant ELSE 0 END) AS montant_success, 5 SUM(CASE WHEN statut = 'ECHEC' THEN 1 ELSE 0 END) AS nb_echecs 6FROM transactions 7GROUP BY pays; 8
👉 Idéal pour les tableaux de bord et rapports de performance.
Ces opérateurs permettent de générer plusieurs niveaux d’agrégation.
Agrégations hiérarchiques.
GROUP BY ROLLUP(pays, ville)
Toutes les combinaisons possibles.
GROUP BY CUBE(pays, ville)
Contrôle précis des agrégations.
1GROUP BY GROUPING SETS ( 2 (pays), 3 (ville), 4 () 5) 6
| Opération | Usage |
|---|---|
| ROLLUP | Totaux progressifs |
| CUBE | Analyse multidimensionnelle |
| GROUPING SETS | Reporting sur mesure |
Les CTE rendent les requêtes longues lisibles et maintenables.
1WITH tx_filtrees AS ( 2 SELECT * 3 FROM transactions 4 WHERE date_tx >= '2025-01-01' 5) 6SELECT pays, SUM(montant) 7FROM tx_filtrees 8GROUP BY pays; 9
Les CTE récursives sont idéales pour gérer des arbres, hiérarchies et graphes.
1WITH RECURSIVE hierarchie AS ( 2 SELECT id, nom, manager_id, 1 AS niveau 3 FROM employes 4 WHERE manager_id IS NULL 5 6 UNION ALL 7 8 SELECT e.id, e.nom, e.manager_id, h.niveau + 1 9 FROM employes e 10 JOIN hierarchie h ON e.manager_id = h.id 11) 12SELECT * FROM hierarchie; 13
👉 Cette requête reconstruit toute la chaîne hiérarchique.
La maîtrise de ces concepts SQL avancés permet de :
Ces techniques sont aujourd’hui indispensables en data analysis, BI et fraude.
💡 Conseil pratique : entraînez-vous avec des jeux de données réels (transactions, logs, ventes) pour bien intégrer ces notions.