single
HAVING-Klausul
Stryg for at vise menuen
Skoleinformationssystemet gennemgås for at sikre datakonsistens og nøjagtighed. Som en del af denne gennemgang er der blevet tildelt en ny dataanalyseringsopgave.
Under rutinetjek 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.
Overvej hvordan du kan gøre dette. Du kan starte med at tænke på, at du 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 du ikke kan bruge aggregeringsfunktioner i en WHERE-klausul. Dette er hvor du skal bruge HAVING-klausulen.
Antag, at du 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
Resultatet er én afdeling i svaret ved brug af HAVING-klausulen, hvor en betingelse er angivet for kolonnen, som bruges til gruppering.
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.
Her er en mere generaliseret 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)
-- This will cause an error
Her er et kort overblik over hovedforskellen mellem WHERE- og HAVING-klausulerne, samt hvornår de skal bruges:
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 bruge HAVING-klausulen korrekt. Gå nu tilbage til opgaven, som skolen har givet os.
Swipe to start coding
Nogle elever optræder flere gange i karakterregistrene, hvilket indikerer dubletter 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