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

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

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

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.

Editor laden…
Toon hint

Gebruik MAX(prijs) gecombineerd met OVER().

Oplossing beschikbaar na 3 pogingen

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

Extraheer 'id', 'prijs' en voeg de algehele gemiddelde prijs ('global_avg') toe uit de tabel 'producten'.

Editor laden…
Toon hint

Voeg gewoon AVG(prijs) OVER() toe.

Oplossing beschikbaar na 3 pogingen