Modulelessen (2/4)
Groeperen met PARTITIE DOOR
Groeperen met PARTITIE DOOR
Het is handig om op elke rij globale berekeningen te hebben, maar vaak is dit niet voldoende. Misschien willen we het gemiddelde per categorie of per klant berekenen, terwijl we de oorspronkelijke details van elke rij behouden.
Dit is waar PARTITION BY binnen de OVER(...) clausule van pas komt.
Hoe PARTITION BY werkt
Conceptueel gedraagt het zich op dezelfde manier als GROUP BY, maar in plaats van rijen in het resultaat samen te vouwen, definieert het alleen de grens van het "venster" met gegevens waarop de functie zal werken om het resultaat voor de enkele rij te berekenen.
SELECT
product_name,
category_id,
price,
AVG(price) OVER(PARTITION BY category_id) AS cat_avg_price
FROM products;Elke productrij behoudt zijn eigen details, en de kolom cat_avg_price toont het gemiddelde beperkt tot de producten in dezelfde categorie.
Uit de tabel 'producten' extraheert u 'id', 'category_id' en 'price'. Voeg een kolom 'category_total' toe die de SOM van 'price' voor elke 'category_id' berekent met behulp van vensterfuncties.
Toon hint
Gebruik SUM(prijs) OVER(PARTITIE OP categorie_id).
Oplossing beschikbaar na 3 pogingen
Toon in de tabel 'recensies' 'product_id', 'rating' en 'avg_product_rating' (de gemiddelde beoordeling opgesplitst per product). Toon alle rijen.
Toon hint
Gebruik AVG(rating) en PARTITION BY product_id. Cast het indien nodig naar NUMERIC.
Oplossing beschikbaar na 3 pogingen