Modulelessen (1/4)
Inleiding en de OVER-clausule
Inleiding en de OVER-clausule
In de vorige lessen hebben we gezien hoe je GROUP BY kunt gebruiken om gegevens te verzamelen. GROUP BY heeft echter een enorme beperking: het vouwt rijen samen. Als je groepeert op stad, krijg je één rij per stad en verlies je de gegevens van de individuele klanten.
Dit is waar Vensterfuncties een rol gaan spelen. Hiermee kunt u aggregatieberekeningen uitvoeren (zoals sommen of gemiddelden) terwijl de oorspronkelijke rijen behouden blijven.
De OVER()-clausule
Het magische trefwoord is OVER(). Het vertelt de database dat de aggregatiefunctie (bijvoorbeeld SUM, AVG, COUNT) moet worden behandeld als een vensterfunctie, berekend over de hele resultatenset (het globale "venster"), maar toegepast en geretourneerd op elke afzonderlijke rij.
SELECT
order_id,
total_amount,
AVG(total_amount) OVER() AS global_average
FROM orders;In dit voorbeeld behouden we elke individuele bestelling, maar elke rij heeft ook een kolom global_average met het gemiddelde van alle bestellingen. Erg handig om bijvoorbeeld te meten hoeveel een bestelling afwijkt van het gemiddelde!
Selecteer de kolom 'prijs' uit de tabel 'producten'. Voeg een kolom toe met de naam 'global_max_price' die de maximale prijs bevat die is berekend met een vensterfunctie over de hele tabel.
Toon hint
Gebruik MAX(prijs) gecombineerd met OVER().
Oplossing beschikbaar na 3 pogingen
Extraheer 'id', 'prijs' en voeg de algehele gemiddelde prijs ('global_avg') toe uit de tabel 'producten'.
Toon hint
Voeg gewoon AVG(prijs) OVER() toe.
Oplossing beschikbaar na 3 pogingen