Direct naar de hoofdinhoud
Module 13 · Les 2 van 450/57 in de cursus~15 min
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.

SQL
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.

Oefening#sql.m13.l2.e1
Pogingen: 0Laden…

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.

Editor laden…
Toon hint

Gebruik SUM(prijs) OVER(PARTITIE OP categorie_id).

Oplossing beschikbaar na 3 pogingen

Oefening#sql.m13.l2.e2
Pogingen: 0Laden…

Toon in de tabel 'recensies' 'product_id', 'rating' en 'avg_product_rating' (de gemiddelde beoordeling opgesplitst per product). Toon alle rijen.

Editor laden…
Toon hint

Gebruik AVG(rating) en PARTITION BY product_id. Cast het indien nodig naar NUMERIC.

Oplossing beschikbaar na 3 pogingen