Introduction — Séance 4
Les trois premières séances ont couvert une API REST (séance 1), un dashboard Streamlit avec filtres et KPI (séance 2), et des graphiques Plotly Express (séance 3). Jusqu'ici, vos requêtes SQL se limitaient à SELECT, WHERE, GROUP BY et ORDER BY. Cette séance introduit les outils SQL qui manquent.
Contexte
Votre dashboard affiche le chiffre d'affaires par région, l'évolution mensuelle et la répartition par catégorie. Mais certaines questions restent sans réponse avec le SQL de base :
- Classements : « Quel est le rang de chaque région ? » — on peut trier, mais pas numéroter automatiquement.
- Comparaisons temporelles : « Quelle est l'évolution du CA par rapport au mois précédent ? » — on ne peut pas accéder à la ligne précédente.
- Top N par groupe : « Quels sont les 3 meilleurs produits par région ? » —
GROUP BYretourne une seule ligne par groupe. - Lisibilité : « Comment structurer une requête de 40 lignes ? » — sans outil de structuration, le SQL devient illisible.
Les outils de cette séance : CTEs, window functions, LAG() et jointures combinées.
Compatibilité SQLite
Les fonctionnalités SQL de cette séance sont disponibles dans SQLite depuis les versions 3.8.3 (CTEs, 2014) et 3.25.0 (window functions, 2018). Vérifiez votre version :
import sqlite3
print(sqlite3.sqlite_version)
Toute version supérieure à 3.25.0 est compatible.
Objectifs de la séance
- Écrire des requêtes lisibles et modulaires avec les CTEs (
WITH ... AS) - Utiliser RANK(), ROW_NUMBER() et DENSE_RANK() pour classer sans perdre de lignes
- Comparer des périodes avec LAG() — mois sur mois et année sur année
- Combiner JOIN, CTEs et window functions dans une même requête
- Appliquer les bonnes pratiques SQL : lisibilité, test incrémental, gestion des NULL
Prérequis
- Séances 1 à 3 complétées : API REST, dashboard Streamlit, graphiques Plotly Express
- SQL de base :
SELECT,WHERE,GROUP BY,ORDER BY,SUM(),COUNT(),AVG() - Repository : la classe
VentesRepositoryavec ses méthodes d'agrégation - pandas :
pd.read_sql_query()pour tester les requêtes
Prérequis SQL
Si les notions de GROUP BY, HAVING ou ORDER BY ne sont pas claires, relisez les requêtes de la séance 1 avant de continuer. Cette séance s'appuie entièrement sur ces fondamentaux.
Plan de la séance
| Partie | Contenu | Durée estimée |
|---|---|---|
| CTEs | Syntaxe WITH, CTEs chaînées, intégration repository | 25 min |
| Window functions | OVER, PARTITION BY, RANK/ROW_NUMBER/DENSE_RANK, top N par groupe | 30 min |
| LAG | Comparaison mois sur mois, année sur année, double graphique | 20 min |
| Jointures | INNER JOIN, LEFT JOIN, combinaison avec CTEs et window functions | 15 min |
| Bonnes pratiques | Limites du SQL de base, lisibilité, test incrémental, NULL | 15 min |
| Exercices | Mise en pratique (4 parties) | 45 min |
| Quiz | Validation des acquis | 10 min |
Approche pédagogique
Chaque concept est introduit avec un problème concret que le SQL de base ne peut pas résoudre, puis intégré dans le repository et visualisé dans Streamlit.