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.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Les chiffres
  5. Mises en situation
  6. 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) avec GROUP BY rend une ligne par groupe, alors que SUM(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, 240
    • 240, 240, 240, 240, 240, 240
    • 40, 25, 60, 10, 90, 15
    • 240, 200, 175, 115, 105, 15
    Voir la réponse

    40, 65, 125, 135, 225, 240

    Avec un ORDER BY dans OVER, la somme porte sur les lignes de la première à la ligne courante : un cumul. Sans ORDER BY (OVER ()), chaque ligne recevrait le total de 240.

  • GROUP BY … les lignes à une par groupe ; un agrégat suivi de OVER … toutes les lignes.

    Voir la réponse

    GROUP BY réduit les lignes à une par groupe ; un agrégat suivi de OVER conserve toutes les lignes.

    Avec 12 ventes en 3 régions, GROUP BY region rend 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.