HAVING-Clausule
De school is zeer dankbaar voor je werk, en er is nu 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 maar éé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. Je zou kunnen overwegen dat we dit met een WHERE
-clausule kunnen doen, en het zou er ongeveer zo uitzien:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Maar, zoals je ziet, 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 gegevensgroepering in onze query zijn. Zoals in de bovenstaande query groepeerden we de gegevens op de kolomdepartment
.
Laten we 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 elk van hen gebruikt:
- 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 het succesvol gebruiken van de HAVING
-clausule. Laten we nu terugkeren 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 antwoord op te nemen. Gebruik de HAVING
-clausule en de aggregatiefunctie COUNT()
om deze taak uit te voeren. Sorteer vervolgens de achternamen in alfabetische volgorde.
Opmerking:
Er mag slechts één kolom met achternamen in het resultaat staan.
Korte instructies
- Haal de kolom
student_surname
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!
single
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Can you show me how to write the correct SQL query to find those students?
Can you explain why the HAVING clause works in this situation?
Can you give another example of using HAVING with a different aggregate function?
Awesome!
Completion rate improved to 4
HAVING-Clausule
Veeg om het menu te tonen
De school is zeer dankbaar voor je werk, en er is nu 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 maar éé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. Je zou kunnen overwegen dat we dit met een WHERE
-clausule kunnen doen, en het zou er ongeveer zo uitzien:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Maar, zoals je ziet, 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 gegevensgroepering in onze query zijn. Zoals in de bovenstaande query groepeerden we de gegevens op de kolomdepartment
.
Laten we 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 elk van hen gebruikt:
- 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 het succesvol gebruiken van de HAVING
-clausule. Laten we nu terugkeren 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 antwoord op te nemen. Gebruik de HAVING
-clausule en de aggregatiefunctie COUNT()
om deze taak uit te voeren. Sorteer vervolgens de achternamen in alfabetische volgorde.
Opmerking:
Er mag slechts één kolom met achternamen in het resultaat staan.
Korte instructies
- Haal de kolom
student_surname
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!
Awesome!
Completion rate improved to 4single