OnderwerpenSpiekbriefjeLessen
Lurndo › Onderwerpen › Vensters per groep met PARTITION BY

SQL leren: Vensters per groep met PARTITION BY

Per ploeg, per rit

Elke ploeg wil haar eigen lijstje: wie is onze jongste, wie onze beste renner per rit? "Vier ploegen, vijf ritten. Dat zijn veel lijstjes", zucht Griet. Of één query die per groep opnieuw begint te tellen.

Opnieuw beginnen per groep

Met PARTITION BY in de OVER verdeel je de rijen in groepen. De window function begint in elke groep opnieuw: hier krijgt de jongste renner van elke ploeg nummer 1.

Anders dan bij GROUP BY blijven alle rijen staan. Je krijgt dus geen vier rijen, maar zestien, elk met een nummer binnen de eigen ploeg.

SELECT r.naam, p.naam AS ploeg, r.geboortedatum, ROW_NUMBER() OVER (PARTITION BY r.ploeg_id ORDER BY r.geboortedatum DESC) AS nr FROM renners r JOIN ploegen p ON p.id = r.ploeg_id
Resultaat
naamploeggeboortedatumnr
Milan DhondtFlandrien Pro2003-01-301
Wout De ClercqFlandrien Pro2001-07-022
Lars VermeulenFlandrien Pro1999-03-143
Jens MoreelsFlandrien Pro1997-11-234
Tibo LauwersPajot Cycling2002-09-171
Arne Van HeckePajot Cycling2000-05-092
Senne PauwelsPajot Cycling1998-12-053
Kasper HolmPajot Cycling1996-04-214

De beste per groep

Een klassieker: de beste rij per groep. Nummer eerst per groep in een WITH, en hou dan alleen nummer 1.

PARTITION BY mag ook meerdere kolommen hebben. Hier zie je per etappe de best geplaatste renner van elke ploeg: vijf ritten, vier ploegen, twintig rijen.

WITH gerangschikt AS (
SELECT u.etappe_id, r.ploeg_id, r.naam, u.plaats,
ROW_NUMBER() OVER (PARTITION BY u.etappe_id, r.ploeg_id ORDER BY u.plaats) AS nr
FROM uitslagen u JOIN renners r ON r.id = u.renner_id
)
SELECT etappe_id, ploeg_id, naam, plaats FROM gerangschikt WHERE nr = 1
Resultaat
etappe_idploeg_idnaamplaats
11Wout De Clercq10
12Arne Van Hecke6
13Ruben de Graaf2
14Louis Garnier1
21Jens Moreels3
22Tibo Lauwers5
23Jesper Kuipers1
24Hugo Lefèvre4

Probeer het zelf

Nummer de renners per ploeg, de oudste krijgt 1. Toon de naam, de ploeg_id en het nummer.

Klaar voor meer?

De volledige les heeft 5 oefeningen, van makkelijk naar uitdagend, met hints, punten en een reeks die je kan opbouwen.

Begin aan de les
← VorigeGelijke tijdVolgende →De tussenstand
SQL-onderwerpenSpiekbriefjeExcelRanglijstAccountPrivacyEnglish