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

bookHAVING-Clausule

Het informatiesysteem van de school wordt herzien om gegevensconsistentie en nauwkeurigheid te waarborgen. Als onderdeel van deze herziening is een nieuwe data-analysetaak toegewezen.

Tijdens routinematige controles werd ontdekt dat sommige leerlingendossiers meer dan één cijfervermelding bevatten, terwijl het systeem is ontworpen om slechts één cijfer per leerling op te slaan.

De opdracht is om dergelijke gevallen te identificeren voor verder intern onderzoek.

Laten we samen nadenken over hoe we dit kunnen aanpakken. Je zou kunnen beginnen met de overweging 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.

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

Bekijk de meer algemene syntaxis van de HAVING-clausule 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 deze te gebruiken:

  1. De WHERE-clausule wordt gebruikt voor data-aggregatie, terwijl de HAVING-clausule wordt gebruikt na data-aggregatie;
  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 onthouden moeten worden voor het succesvol toepassen van de HAVING-clausule. Laten we nu terugkeren naar de opdracht die door de school is gegeven.

Taak

Swipe to start coding

Sommige studenten komen meerdere keren voor in de cijferregistraties, wat duidt op dubbele of onverwachte vermeldingen in het systeem.

Je moet de achternamen ophalen van alle studenten van wie de registratie meer dan één cijfervermelding bevat. Het resultaat zal door de schooladministratie worden gebruikt om de gegevens te controleren en indien nodig te corrigeren.

Geef alleen de lijst met achternamen die aan deze voorwaarde voldoen, alfabetisch gesorteerd.

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 use the HAVING clause to find students with multiple grade entries?

Can you explain why the HAVING clause works in this scenario but WHERE does not?

Can you provide an example query for the school task using HAVING?

close

bookHAVING-Clausule

Veeg om het menu te tonen

Het informatiesysteem van de school wordt herzien om gegevensconsistentie en nauwkeurigheid te waarborgen. Als onderdeel van deze herziening is een nieuwe data-analysetaak toegewezen.

Tijdens routinematige controles werd ontdekt dat sommige leerlingendossiers meer dan één cijfervermelding bevatten, terwijl het systeem is ontworpen om slechts één cijfer per leerling op te slaan.

De opdracht is om dergelijke gevallen te identificeren voor verder intern onderzoek.

Laten we samen nadenken over hoe we dit kunnen aanpakken. Je zou kunnen beginnen met de overweging 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.

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

Bekijk de meer algemene syntaxis van de HAVING-clausule 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 deze te gebruiken:

  1. De WHERE-clausule wordt gebruikt voor data-aggregatie, terwijl de HAVING-clausule wordt gebruikt na data-aggregatie;
  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 onthouden moeten worden voor het succesvol toepassen van de HAVING-clausule. Laten we nu terugkeren naar de opdracht die door de school is gegeven.

Taak

Swipe to start coding

Sommige studenten komen meerdere keren voor in de cijferregistraties, wat duidt op dubbele of onverwachte vermeldingen in het systeem.

Je moet de achternamen ophalen van alle studenten van wie de registratie meer dan één cijfervermelding bevat. Het resultaat zal door de schooladministratie worden gebruikt om de gegevens te controleren en indien nodig te corrigeren.

Geef alleen de lijst met achternamen die aan deze voorwaarde voldoen, alfabetisch gesorteerd.

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