Les fonctions de fenêtrage
La clause OVER avec PARTITION BY et ORDER BY, ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD et le cumul par SUM … OVER : calculer à côté de chaque ligne sans l'écraser, contrairement à GROUP BY.
- 25 cartes
- 6 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Les chiffres
- Mises en situation
- Comprendre
Quelques cartes du deck
Fonction de fenêtrage : de quoi s'agit-il ?
Voir la réponse
Fonction calculée sur un ensemble de lignes liées à la ligne courante, sans les regrouper : chaque ligne du résultat reste présente et reçoit sa valeur.
La clause
OVER (…)la distingue d'un agrégat :SUM(montant)avecGROUP BYrend une ligne par groupe, alors queSUM(montant) OVER (…)rend autant de lignes que la table.Les montants de commande, par id croissant, sont 40, 25, 60, 10, 90 et 15. Que contient la colonne
cumul?
```sql
SELECT id, montant,
SUM(montant) OVER (ORDER BY id) AS cumul
FROM commande
ORDER BY id;`40, 65, 125, 135, 225, 240240, 240, 240, 240, 240, 24040, 25, 60, 10, 90, 15240, 200, 175, 115, 105, 15
Voir la réponse
40, 65, 125, 135, 225, 240Avec un
ORDER BYdansOVER, la somme porte sur les lignes de la première à la ligne courante : un cumul. SansORDER BY(OVER ()), chaque ligne recevrait le total de 240.GROUP BY… les lignes à une par groupe ; un agrégat suivi deOVER… toutes les lignes.Voir la réponse
GROUP BYréduit les lignes à une par groupe ; un agrégat suivi deOVERconserve toutes les lignes.Avec 12 ventes en 3 régions,
GROUP BY regionrend 3 lignes,SUM(montant) OVER (PARTITION BY region)en rend 12. Pour comparer chaque vente à son total régional, il faut la seconde forme.PARTITION BY : de quoi s'agit-il ?
Voir la réponse
Sous-clause de OVER qui découpe les lignes en paquets indépendants : la fonction recommence à zéro dans chaque paquet.
RANK() OVER (PARTITION BY classe ORDER BY note DESC)classe les élèves dans leur classe. Sans elle, toute la table forme un seul paquet.