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.
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.
À 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.
Afficher l'indice
Utilisez SUM(price) OVER(PARTITION BYcategory_id).
Solution disponible après 3 tentatives
Dans le tableau « avis », affichez « product_id », « rating » et « avg_product_rating » (la note moyenne divisée par produit). Afficher toutes les lignes.
Afficher l'indice
Utilisez AVG(rating) et PARTITION BY product_id. Convertissez-le en NUMERIC si nécessaire.
Solution disponible après 3 tentatives