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

Veeg om het menu te tonen

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

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

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:

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

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

  1. De WHERE-clausule wordt gebruikt voor gegevensaggregatie, terwijl de HAVING-clausule wordt gebruikt na gegevensaggregatie;

  2. De WHERE-clausule wordt voorGROUP BY geschreven, terwijl de HAVING-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.

Taak

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

Vraag AI

expand
ChatGPT

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

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

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

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:

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

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

  1. De WHERE-clausule wordt gebruikt voor gegevensaggregatie, terwijl de HAVING-clausule wordt gebruikt na gegevensaggregatie;

  2. De WHERE-clausule wordt voorGROUP BY geschreven, terwijl de HAVING-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.

Taak

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 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
Switch to desktopSchakel over naar desktop voor praktijkervaringGa verder vanaf waar je bent met een van de onderstaande opties
Onze excuses dat er iets mis is gegaan. Wat is er gebeurd?
some-alt