PaliSkill
SQL — Fonctions de fenêtrage

Leçon 1 / 9 — Chapitre 1: Classer avec ROW_NUMBER, RANK, DENSE_RANK

Principe général : la différence avec GROUP BY

GROUP BY réduit vos lignes : N lignes deviennent un nombre de lignes égal au nombre de groupes distincts. Une fonction de fenêtrage (OVER(...)) fait l'inverse : elle calcule une valeur agrégée pour chaque ligne, sans en supprimer aucune.

SELECT equipe, COUNT(*) FROM employes GROUP BY equipe;

→ 2 lignes (une par équipe : ventes, support) — les 6 lignes individuelles ont disparu.

SELECT nom, equipe, COUNT(*) OVER (PARTITION BY equipe) AS taille_equipe
FROM employes;

→ 6 lignes (toutes les lignes d'origine, chacune enrichie d'une colonne taille_equipe).

À retenir :

  • GROUP BY regroupe et réduit le nombre de lignes du résultat.
  • Une fonction de fenêtrage (OVER(...)) calcule une valeur par ligne, en gardant toutes les lignes d'origine.
  • PARTITION BY (vu en détail leçon 3) restreint le calcul à un sous-ensemble de lignes, sans les fusionner.

À vous de jouer : comparez SELECT COUNT(*) FROM employes; et SELECT COUNT(*) OVER () FROM employes; — le second répète la même valeur sur chaque ligne.

À vous de jouer

À faire

Voici une table employes :

employes
id | nom      | equipe  | anciennete
1  | Amara     | ventes  | 5
2  | Baptiste  | ventes  | 3
3  | Chloé     | ventes  | 3
4  | David     | support | 7
5  | Elise     | support | 2
6  | Farid     | support | 7

Combien de lignes retourne SELECT equipe, COUNT(*) FROM employes GROUP BY equipe; ?

Testez cette requête dans un bac à sable SQL en ligne (SQLite Fiddle, W3Schools "Try SQL", ou tout autre) pour vérifier le résultat avant de répondre.

💡 Un nombre.

À vous de jouer

À faire

Voici la même table employes (6 lignes). Combien de lignes retourne SELECT nom, equipe, COUNT(*) OVER (PARTITION BY equipe) AS taille_equipe FROM employes; ?

Testez cette requête dans un bac à sable SQL en ligne (SQLite Fiddle, W3Schools "Try SQL", ou tout autre) pour vérifier le résultat avant de répondre.

💡 Un nombre.

Quitter le module