HAVING-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:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
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:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Vi modtog én afdeling som svar ved brug af HAVING-klausulen, hvor vi angav en betingelse for kolonnen, som vi grupperede dataene efter.
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:
WHERE-klausulen bruges før dataaggregering, mensHAVING-klausulen bruges efter dataaggregering;WHERE-klausulen skrives førGROUP BY, mensHAVING-klausulen skrives efterGROUP 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.
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
Tak for dine kommentarer!
single
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
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?
Fantastisk!
Completion rate forbedret til 4
HAVING-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:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
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:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Vi modtog én afdeling som svar ved brug af HAVING-klausulen, hvor vi angav en betingelse for kolonnen, som vi grupperede dataene efter.
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:
WHERE-klausulen bruges før dataaggregering, mensHAVING-klausulen bruges efter dataaggregering;WHERE-klausulen skrives førGROUP BY, mensHAVING-klausulen skrives efterGROUP 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.
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
Tak for dine kommentarer!
single