HAVING-Clausule
De school is erg dankbaar voor je werk, en nu is er een nieuwe taak voor ons.
Het blijkt dat sommige studenten extra examens hebben afgelegd terwijl ze slechts één examen mochten afleggen. De school verdenkt hen van valsspelen omdat elke student slechts één cijfer zou moeten hebben.
We hebben de taak 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 doen. Je zou kunnen beginnen door te overwegen dat we dit kunnen doen met een WHERE
clausule, en het zou er ongeveer zo uitzien:
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Maar, zoals je kunt zien, krijgen we een fout die aangeeft dat we geen aggregatiefuncties kunnen gebruiken binnen een WHERE
-clausule. Dit is waar we de HAVING
-clausule nodig hebben.
Stel dat we de afdelingen moeten 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:
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
We ontvingen één afdeling als antwoord met behulp van de HAVING
-clausule, waarbij we een voorwaarde instelden voor de kolom waarmee we de gegevens groepeerden.
Opmerking
Om gegevensaggregatie te gebruiken binnen de
HAVING
-clausule, moeten we gegevensgroepering in onze query hebben. Zoals in de bovenstaande query, groepeerden we de gegevens op dedepartment
-kolom.
Laten we eens kijken naar de meer algemene syntaxis van de HAVING
-clausule en wanneer het het beste is om deze te gebruiken:
sql
Laten we ook kort het belangrijkste verschil tussen WHERE
- en HAVING
-clausules begrijpen en wanneer je elk van hen moet gebruiken:
De
WHERE
-clausule wordt gebruikt voor gegevensaggregatie, terwijl deHAVING
-clausule wordt gebruikt na gegevensaggregatie;De
WHERE
-clausule wordt voorGROUP BY
geschreven, terwijl deHAVING
-clausule naGROUP BY
wordt geschreven.
Dit zijn de twee belangrijkste verschillen die je moet onthouden voor succesvol gebruik van de HAVING
-clausule. Laten we nu terugkeren naar de taak die ons door de school is gegeven.
Swipe to start coding
Je taak is om de achternamen van studenten op te halen die meerdere cijfers hebben voor de school.
Je hoeft alleen de achternamen van de studenten op te halen; het is niet nodig om het aantal van hun cijfers in de respons op te nemen. Gebruik de HAVING
clausule en de COUNT()
aggregatiefunctie om deze taak te voltooien. Sorteer vervolgens de achternamen in alfabetische volgorde.
Opmerking:
Je zou slechts één kolom met achternamen in het resultaat moeten hebben.
Korte Instructies
- Haal de
student_surname
kolom op. - 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!