Passer au contenu principal
eLearner.app
Module 13 · Leçon 2 sur 450/57 dans le cours~15 min
Leçons du module (2/4)

Grouper avec PARTITION BY

Regroupement avec PARTITION BY

Avoir des calculs globaux sur chaque ligne est pratique, mais cela ne suffit souvent pas. Nous souhaiterons peut-être calculer la moyenne par catégorie ou par client, tout en conservant les détails d'origine sur chaque ligne.

C'est là qu'intervient PARTITION BY à l'intérieur de la clause OVER(...).

Comment fonctionne PARTITION BY

Conceptuellement, il se comporte de manière similaire à GROUP BY, mais au lieu de réduire les lignes du résultat, il définit uniquement la limite de la « fenêtre » de données sur laquelle la fonction opérera pour calculer le résultat pour une seule ligne.

SQL
SELECT
  product_name,
  category_id,
  price,
  AVG(price) OVER(PARTITION BY category_id) AS cat_avg_price
FROM products;

Chaque ligne de produits conserve ses propres détails, et la colonne cat_avg_price affichera la moyenne limitée aux produits de sa même catégorie.

Exercice#sql.m13.l2.e1
Tentatives : 0Chargement…

À partir du tableau « produits », extrayez « id », « category_id » et « price ». Ajoutez une colonne 'category_total' calculant la SOMME du 'price' pour chaque 'category_id' à l'aide des fonctions de fenêtre.

Chargement de l'éditeur…
Afficher l'indice

Utilisez SUM(price) OVER(PARTITION BYcategory_id).

Solution disponible après 3 tentatives

Exercice#sql.m13.l2.e2
Tentatives : 0Chargement…

Dans le tableau « avis », affichez « product_id », « rating » et « avg_product_rating » (la note moyenne divisée par produit). Afficher toutes les lignes.

Chargement de l'éditeur…
Afficher l'indice

Utilisez AVG(rating) et PARTITION BY product_id. Convertissez-le en NUMERIC si nécessaire.

Solution disponible après 3 tentatives