Geef eens een voorbeeld waarbij je een subselect in having gebruikt?
Welke cursus heeft (c.q. welke cursussen hebben) de meeste inschrijvingen? Geef van die cursus(sen) de code, de naam en het aantal inschrijvingen. Laat cursussen zonder inschrijvingen buiten beschouwing.Opmerking: twee of meer cursussen kunnen ‘ex aequo’ de meeste inschrijvingen hebben.
We moeten van elke cursus het aantal inschrijvingen vergelijken met het maximum van al die aantallen. Het aantal inschrijvingen per cursus vinden we door Inschrijving te groeperen op cursus. Als eerste stap naar de oplossing vinden we dus:
select C.code, C.naam, count(*) from Cursus C join Inschrijving I on C.code = I.cursus group by C.code, C.naam having count(*) = (maximum aantal inschrijvingen per cursus)
Nu hoeven we alleen nog een select -expressie te vinden voor het in natuurlijke taal gestelde deelprobleem, en dat hebben we in voorbeeld 7.3 al gedaan:
select C.code, C.naam, count(*) from Cursus C join Inschrijving I on C.code = I.cursus group by C.code, C.naam having count(*) = (--maximum aantal inschrijvingen per cursus select max(aantal_inschrijvingen) from (-- aantallen inschrijvingen per cursus select count(*) aantal_inschrijvingen from Inschrijving group by cursus));