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));

    Rapporteer Plaats commentaar