Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære HAVING-Klausul | Gruppering
Mellemliggende SQL

bookHAVING-Klausul

Skoleinformationssystemet bliver gennemgået for at sikre datakonsistens og nøjagtighed. Som en del af denne gennemgang er der blevet tildelt en ny dataanalyseringsopgave.

Under rutinemæssige kontroller blev det opdaget, at nogle elevposter indeholder mere end én karakterregistrering, selvom systemet er designet til kun at gemme én karakter pr. elev.

Din opgave er at hjælpe med at identificere sådanne tilfælde til yderligere intern gennemgang.

Lad os overveje hvordan vi kan gøre dette. Du kan starte med at tænke på, at vi kan gøre dette ved hjælp af en WHERE-klausul, og det kunne se sådan ud:

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

Men som du kan se, får vi en fejl, der angiver, at vi ikke kan bruge aggregeringsfunktioner i en WHERE-klausul. Det er her, vi skal bruge HAVING-klausulen.

Lad os sige, at vi skal hente de afdelinger, hvor medarbejdernes gennemsnitlige løn er under $70.000 om året. For at opnå dette skal vi bruge en aggregeringsfunktion og HAVING-klausulen:

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

Vi modtog én afdeling som svar ved brug af HAVING-klausulen, hvor vi angav en betingelse for kolonnen, som vi grupperede dataene efter.

Note
Bemærk

For at bruge dataaggregering inden for HAVING-klausulen, skal vi have datagruppering i vores forespørgsel. Som i forespørgslen ovenfor grupperede vi dataene efter kolonnen department.

Lad os se på den mere generaliserede syntaks for HAVING-klausulen, og hvornår det er bedst at bruge den:

SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)

Lad os også kort forstå hovedforskellen mellem WHERE og HAVING klausulerne, samt hvornår hver af dem anvendes:

  1. WHERE-klausulen bruges før dataaggregering, mens HAVING-klausulen bruges efter dataaggregering;
  2. WHERE-klausulen skrives før GROUP BY, mens HAVING-klausulen skrives efter GROUP BY.

Dette er de to vigtigste forskelle, du skal huske for at kunne anvende HAVING-klausulen korrekt. Lad os nu vende tilbage til opgaven, som skolen har givet os.

Opgave

Swipe to start coding

Nogle elever optræder flere gange i karakterregistrene, hvilket indikerer dublerede eller uventede poster i systemet.

Du skal hente efternavnene på alle elever, hvis poster indeholder mere end én karakterregistrering. Resultatet vil blive brugt af skolens administration til at gennemgå og rette dataene om nødvendigt.

Returnér kun listen over efternavne, der opfylder denne betingelse, sorteret alfabetisk.

Korte instruktioner

  • Hent kolonnen student_surname.
  • Gruppér dataene efter student_surname.
  • Brug HAVING-klausulen til at filtrere resultaterne baseret på COUNT(grade) > 1.
  • Sortér resultaterne efter student_surname.

Løsning

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 6
single

single

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

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

Stryg for at vise menuen

Skoleinformationssystemet bliver gennemgået for at sikre datakonsistens og nøjagtighed. Som en del af denne gennemgang er der blevet tildelt en ny dataanalyseringsopgave.

Under rutinemæssige kontroller blev det opdaget, at nogle elevposter indeholder mere end én karakterregistrering, selvom systemet er designet til kun at gemme én karakter pr. elev.

Din opgave er at hjælpe med at identificere sådanne tilfælde til yderligere intern gennemgang.

Lad os overveje hvordan vi kan gøre dette. Du kan starte med at tænke på, at vi kan gøre dette ved hjælp af en WHERE-klausul, og det kunne se sådan ud:

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

Men som du kan se, får vi en fejl, der angiver, at vi ikke kan bruge aggregeringsfunktioner i en WHERE-klausul. Det er her, vi skal bruge HAVING-klausulen.

Lad os sige, at vi skal hente de afdelinger, hvor medarbejdernes gennemsnitlige løn er under $70.000 om året. For at opnå dette skal vi bruge en aggregeringsfunktion og HAVING-klausulen:

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

Vi modtog én afdeling som svar ved brug af HAVING-klausulen, hvor vi angav en betingelse for kolonnen, som vi grupperede dataene efter.

Note
Bemærk

For at bruge dataaggregering inden for HAVING-klausulen, skal vi have datagruppering i vores forespørgsel. Som i forespørgslen ovenfor grupperede vi dataene efter kolonnen department.

Lad os se på den mere generaliserede syntaks for HAVING-klausulen, og hvornår det er bedst at bruge den:

SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)

Lad os også kort forstå hovedforskellen mellem WHERE og HAVING klausulerne, samt hvornår hver af dem anvendes:

  1. WHERE-klausulen bruges før dataaggregering, mens HAVING-klausulen bruges efter dataaggregering;
  2. WHERE-klausulen skrives før GROUP BY, mens HAVING-klausulen skrives efter GROUP BY.

Dette er de to vigtigste forskelle, du skal huske for at kunne anvende HAVING-klausulen korrekt. Lad os nu vende tilbage til opgaven, som skolen har givet os.

Opgave

Swipe to start coding

Nogle elever optræder flere gange i karakterregistrene, hvilket indikerer dublerede eller uventede poster i systemet.

Du skal hente efternavnene på alle elever, hvis poster indeholder mere end én karakterregistrering. Resultatet vil blive brugt af skolens administration til at gennemgå og rette dataene om nødvendigt.

Returnér kun listen over efternavne, der opfylder denne betingelse, sorteret alfabetisk.

Korte instruktioner

  • Hent kolonnen student_surname.
  • Gruppér dataene efter student_surname.
  • Brug HAVING-klausulen til at filtrere resultaterne baseret på COUNT(grade) > 1.
  • Sortér resultaterne efter student_surname.

Løsning

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 6
single

single

some-alt