À première vue, tu pourrais penser que SQL a déjà tout pour analyser des données : GROUP BY, les agrégats, les sous-requêtes... Mais ça, c’est juste le début. Bienvenue dans le monde des fonctions window — un outil puissant qui te permet de bosser sur les données ligne par ligne, tout en gardant le contexte complet.
Les fonctions window te permettent de faire des calculs — somme, moyenne, rangs et autres — sur une « fenêtre » de lignes, sans faire de collapse sur les données. Ça veut dire qu’à la différence des fonctions d’agrégation classiques (SUM(), AVG(), COUNT()), tu obtiens à la fois le résultat et les détails dans chaque ligne.
Imagine que tu veux calculer le revenu cumulé par commande. Avec GROUP BY, tu perdrais les commandes individuelles — il ne resterait que la somme. Mais avec une fonction window, tu ajoutes le résultat direct à chaque ligne, sans rien perdre.
Les fonctions window sont super pratiques parce qu’elles ne détruisent pas les données : chaque ligne reste à sa place, et les résultats des calculs sont juste ajoutés dans de nouvelles colonnes. Ça te permet de faire de l’analytics avancée sans sous-requêtes ni constructions lourdes — tout se fait direct dans une seule requête. Ces fonctions sont parfaites pour des trucs comme le ranking, le calcul de moyennes mobiles ou la comparaison de valeurs entre lignes. Le code reste lisible, et le résultat — précis.
Quand c’est particulièrement utile :
- Classement des employés, vendeurs, produits — qui est à quelle place.
- Séries temporelles — comment quelque chose a changé par jour ou par semaine.
- Ventes et finances — combien s’est accumulé à chaque étape, quelles commandes sont au-dessus de la moyenne, qui fait partie du top 25%.
Où on utilise les fonctions window
Dans n’importe quel domaine où le contexte compte, pas juste le résultat final :
- rapports de ventes ;
- analyse du comportement client ;
- création de graphiques avec des métriques cumulées ;
- segmentation des données (par exemple, par quartiles) ;
- calcul des écarts et des tendances.
Franchement, c’est une vraie pépite pour les analystes qui bossent avec SQL tous les jours. Regardons quelques exemples du monde réel où les fonctions window peuvent te sauver la vie.
Exemple 1 : Classement des données
Imagine, tu as une liste d’étudiants avec leurs notes d’examen. Tu veux donner à chaque étudiant sa position dans la classe. Avec les fonctions window, c’est super simple. Par exemple, les fonctions RANK() ou ROW_NUMBER() font ça nickel.
Exemple 2 : Analyse de données temporelles
Et si tu veux voir comment les revenus de la boîte ont évolué mois par mois ? Tu as besoin de la somme cumulée des revenus. En utilisant la fonction window SUM() avec une fenêtre définie, tu obtiens ça easy.
Exemple 3 : Quartiles et découpage en groupes
Tu veux découper les données en groupes égaux (genre par revenus) pour segmenter les clients ? Là, la fonction NTILE() vient à la rescousse. Voyons qui sont les clients dans le top 25% et qui sont en bas du classement.
À quoi ça ressemble ?
Une fonction window ajoute juste le résultat dans le jeu de données final :
SELECT
student_id,
grade,
RANK() OVER (ORDER BY grade DESC) AS rank
FROM
students;
Là, on obtient une table où chaque étudiant a son rang unique selon sa note.
Une analogie simple
Imagine que tu fais un jogging avec un groupe de potes. Chacun court à sa vitesse, mais tu veux savoir à quelle place tu es dans la course à l’instant T. Au lieu d’arrêter tout le monde pour faire un tableau des leaders (comme le fait GROUP BY), tu regardes juste autour de toi et tu détermines ton classement actuel.
Voilà ce que fait une fonction window : elle n’arrête pas la course, elle ne sépare pas tout le monde en groupes — elle ajoute juste l’info, tout en gardant le mouvement et les détails. Chacun continue de courir, mais maintenant tu as de l’analytics en plus — genre combien de personnes sont devant, ton rythme par rapport à la moyenne, etc.
Les avantages par rapport aux approches classiques
Regardons un cas classique : calculer le rang des commerciaux par revenu. Il y a deux façons de faire :
Sans fonctions window. Tu dois faire une sous-requête ou même plusieurs, d’abord trier les données, puis les numéroter. C’est non seulement long, mais aussi galère à lire.
Avec les fonctions window. Une seule requête avec une syntaxe propre et claire, et tu as déjà le résultat. Par exemple :
SELECT
seller_id,
revenue,
RANK() OVER (PARTITION BY region ORDER BY revenue DESC) AS rank_in_region
FROM
sales;
Cette requête sépare direct les vendeurs par région et les numérote par ordre décroissant de revenu.
Un exemple réel
Maintenant, imagine que tu es analyste et que tu analyses les données de ventes. Tu dois savoir :
- les revenus totaux pour chaque mois,
- comment le revenu a changé par rapport au mois précédent,
- classer les régions par revenu total.
Tout ça, tu peux le faire avec les fonctions window, et même dans une seule requête. Mais ça, c’est pour les prochaines leçons.
Maintenant que tu as les bases sur les fonctions window, tu es prêt à passer à leur syntaxe et à découvrir la puissance de ROW_NUMBER(), RANK(), DENSE_RANK() et NTILE(). On passe à la prochaine leçon !
GO TO FULL VERSION