SQL leren: Lopende totalen en LAG
De tussenstand
Elke avond om zes uur wil de pers de tussenstand: wie leidt na deze rit, en hoeveel heeft hij opgeteld? "Niet alleen het eindklassement, maar het verloop", zegt Griet. Een totaal dat met elke rit meegroeit.
Een totaal dat meegroeit
Zet je een ORDER BY in de OVER van een SUM, dan groeit het venster mee: van de eerste rij tot en met de huidige. Zo krijg je een lopend totaal.
Hier de punten van Ruben de Graaf, rit na rit, met zijn tussenstand ernaast.
SELECT etappe_id, punten, SUM(punten) OVER (ORDER BY etappe_id) AS totaal FROM uitslagen WHERE renner_id = 11| etappe_id | punten | totaal |
|---|---|---|
| 1 | 12 | 12 |
| 2 | 0 | 12 |
| 3 | 4 | 16 |
| 4 | 15 | 31 |
| 5 | 0 | 31 |
Even terugkijken met LAG
LAG(kolom) haalt de waarde uit de vorige rij van het venster, LEAD(kolom) uit de volgende. De eerste rij heeft geen vorige, en krijgt NULL.
Hier het verschil in afstand met de rit ervoor.
SELECT id, aankomst, km, km - LAG(km) OVER (ORDER BY id) AS verschil FROM etappes| id | aankomst | km | verschil |
|---|---|---|---|
| 1 | Lennik | 164 | NULL |
| 2 | Lennik | 18 | -146 |
| 3 | Galmaarden | 178 | 160 |
| 4 | Pepingen | 185 | 7 |
| 5 | Halle | 156 | -29 |
Probeer het zelf
Toon per etappe de aankomst, de afstand en hoeveel kilometer de renners er na die rit in totaal op hebben zitten.
Klaar voor meer?
De volledige les heeft 6 oefeningen, van makkelijk naar uitdagend, met hints, punten en een reeks die je kan opbouwen.
Begin aan de les