Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer HAVING-Clausule | Groeperen
Intermediate SQL

bookHAVING-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:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

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:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

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 kolom department.

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:

  1. De WHERE-clausule wordt gebruikt voor gegevensaggregatie, terwijl de HAVING-clausule wordt gebruikt na gegevensaggregatie;
  2. De WHERE-clausule wordt voor GROUP BY geschreven, terwijl de HAVING-clausule na GROUP 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.

Taak

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 van COUNT(grade) > 1.
  • Sorteer de resultaten op student_surname.

Oplossing

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 1. Hoofdstuk 6
single

single

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Suggested prompts:

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?

close

Awesome!

Completion rate improved to 4

bookHAVING-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:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

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:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

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 kolom department.

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:

  1. De WHERE-clausule wordt gebruikt voor gegevensaggregatie, terwijl de HAVING-clausule wordt gebruikt na gegevensaggregatie;
  2. De WHERE-clausule wordt voor GROUP BY geschreven, terwijl de HAVING-clausule na GROUP 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.

Taak

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 van COUNT(grade) > 1.
  • Sorteer de resultaten op student_surname.

Oplossing

Switch to desktopSchakel over naar desktop voor praktijkervaringGa verder vanaf waar je bent met een van de onderstaande opties
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

close

Awesome!

Completion rate improved to 4
Sectie 1. Hoofdstuk 6
single

single

some-alt