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

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

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:

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 een groepering van gegevens in onze query zijn. Zoals in de bovenstaande query groepeerden we de gegevens op de kolom department.

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:

  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 toepassen van de HAVING-clausule. Laten we nu teruggaan 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 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_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.

close

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

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

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:

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 een groepering van gegevens in onze query zijn. Zoals in de bovenstaande query groepeerden we de gegevens op de kolom department.

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:

  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 toepassen van de HAVING-clausule. Laten we nu teruggaan 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 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_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!

Sectie 1. Hoofdstuk 6
single

single

some-alt