HAVING-Clausule
De school is zeer dankbaar voor uw werk, en nu is er een nieuwe taak voor ons.
Het blijkt dat sommige studenten extra examens hebben afgelegd terwijl ze er eigenlijk maar één mochten doen. De school verdenkt hen van fraude, omdat elke student slechts één cijfer zou moeten hebben.
Wij hebben de opdracht gekregen om de achternamen van deze studenten te achterhalen en deze door te geven aan de schooladministratie, zodat zij de nodige maatregelen kunnen nemen.
Laten we samen nadenken over hoe we dit kunnen aanpakken. U kunt beginnen met het overwegen dat we dit kunnen doen met een WHERE-clausule, en het zou er ongeveer zo uitzien:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Maar, zoals je kunt zien, krijgen we een foutmelding die aangeeft dat we geen aggregatiefuncties kunnen gebruiken binnen een WHERE-clausule. Hiervoor hebben we de HAVING-clausule nodig.
Stel dat we de afdelingen willen ophalen waar het gemiddelde salaris van werknemers lager is dan $70.000 per jaar.
Om dit te bereiken, moeten we een aggregatiefunctie en de HAVING-clausule gebruiken:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
We ontvingen één afdeling als resultaat met behulp van de HAVING-clausule, waarbij we een voorwaarde instelden voor de kolom waarop we de gegevens groepeerden.
Opmerking
Om gegevensaggregatie te gebruiken binnen de
HAVING-clausule, moet er een groepering van gegevens in onze query zijn. Zoals in de bovenstaande query groepeerden we de gegevens op de kolomdepartment.
Laten we nu de meer algemene syntaxis van de HAVING-clausule bekijken en wanneer deze het beste kan worden gebruikt:
SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
Laten we ook kort het belangrijkste verschil tussen de WHERE- en HAVING-clausules begrijpen en wanneer je welke gebruikt:
- De
WHERE-clausule wordt gebruikt voor gegevensaggregatie, terwijl deHAVING-clausule wordt gebruikt na gegevensaggregatie; - De
WHERE-clausule wordt voorGROUP BYgeschreven, terwijl deHAVING-clausule naGROUP BYwordt geschreven.
Dit zijn de twee belangrijkste verschillen die je moet onthouden voor het succesvol toepassen van de HAVING-clausule. Laten we nu teruggaan naar de opdracht die door de school is gegeven.
Swipe to start coding
Je taak is om de achternamen van studenten op te halen die meerdere cijfers voor de school hebben.
Je hoeft alleen de achternamen van de studenten op te halen; het is niet nodig om het aantal cijfers in het resultaat op te nemen. Gebruik de HAVING-clausule en de COUNT()-aggregatiefunctie om deze taak uit te voeren. Sorteer vervolgens de achternamen in alfabetische volgorde.
Opmerking:
Het resultaat moet slechts één kolom met achternamen bevatten.
Korte instructies
- Haal de kolom
student_surnameop. - Groepeer de gegevens op
student_surname. - Gebruik de
HAVING-clausule om de resultaten te filteren op basis vanCOUNT(grade) > 1. - Sorteer de resultaten op
student_surname.
Oplossing
Bedankt voor je feedback!
single
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Geweldig!
Completion tarief verbeterd naar 4
HAVING-Clausule
Veeg om het menu te tonen
De school is zeer dankbaar voor uw werk, en nu is er een nieuwe taak voor ons.
Het blijkt dat sommige studenten extra examens hebben afgelegd terwijl ze er eigenlijk maar één mochten doen. De school verdenkt hen van fraude, omdat elke student slechts één cijfer zou moeten hebben.
Wij hebben de opdracht gekregen om de achternamen van deze studenten te achterhalen en deze door te geven aan de schooladministratie, zodat zij de nodige maatregelen kunnen nemen.
Laten we samen nadenken over hoe we dit kunnen aanpakken. U kunt beginnen met het overwegen dat we dit kunnen doen met een WHERE-clausule, en het zou er ongeveer zo uitzien:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Maar, zoals je kunt zien, krijgen we een foutmelding die aangeeft dat we geen aggregatiefuncties kunnen gebruiken binnen een WHERE-clausule. Hiervoor hebben we de HAVING-clausule nodig.
Stel dat we de afdelingen willen ophalen waar het gemiddelde salaris van werknemers lager is dan $70.000 per jaar.
Om dit te bereiken, moeten we een aggregatiefunctie en de HAVING-clausule gebruiken:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
We ontvingen één afdeling als resultaat met behulp van de HAVING-clausule, waarbij we een voorwaarde instelden voor de kolom waarop we de gegevens groepeerden.
Opmerking
Om gegevensaggregatie te gebruiken binnen de
HAVING-clausule, moet er een groepering van gegevens in onze query zijn. Zoals in de bovenstaande query groepeerden we de gegevens op de kolomdepartment.
Laten we nu de meer algemene syntaxis van de HAVING-clausule bekijken en wanneer deze het beste kan worden gebruikt:
SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
Laten we ook kort het belangrijkste verschil tussen de WHERE- en HAVING-clausules begrijpen en wanneer je welke gebruikt:
- De
WHERE-clausule wordt gebruikt voor gegevensaggregatie, terwijl deHAVING-clausule wordt gebruikt na gegevensaggregatie; - De
WHERE-clausule wordt voorGROUP BYgeschreven, terwijl deHAVING-clausule naGROUP BYwordt geschreven.
Dit zijn de twee belangrijkste verschillen die je moet onthouden voor het succesvol toepassen van de HAVING-clausule. Laten we nu teruggaan naar de opdracht die door de school is gegeven.
Swipe to start coding
Je taak is om de achternamen van studenten op te halen die meerdere cijfers voor de school hebben.
Je hoeft alleen de achternamen van de studenten op te halen; het is niet nodig om het aantal cijfers in het resultaat op te nemen. Gebruik de HAVING-clausule en de COUNT()-aggregatiefunctie om deze taak uit te voeren. Sorteer vervolgens de achternamen in alfabetische volgorde.
Opmerking:
Het resultaat moet slechts één kolom met achternamen bevatten.
Korte instructies
- Haal de kolom
student_surnameop. - Groepeer de gegevens op
student_surname. - Gebruik de
HAVING-clausule om de resultaten te filteren op basis vanCOUNT(grade) > 1. - Sorteer de resultaten op
student_surname.
Oplossing
Bedankt voor je feedback!
single