HAVING-Klausul
Skolen er meget taknemmelig for dit arbejde, og nu har vi fået en ny opgave.
Det viser sig, at nogle elever har taget ekstra prøver, selvom de kun skulle have taget én. Skolen mistænker dem for snyd, fordi hver elev kun burde have én karakter.
Vi har fået til opgave at finde efternavnene på disse elever og videregive dem til skoleledelsen, så de kan tage de nødvendige foranstaltninger.
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 aggregatfunktioner inde i en WHERE
-klausul. Det er her, vi skal bruge HAVING
-klausulen.
Antag, 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 aggregatfunktion 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.
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 kolonnendepartment
.
Lad os se på den mere generaliserede syntaks for HAVING
-klausulen, og hvornår det er bedst at anvende den:
SELECT column1, column2... --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
Lad os også kort forstå den væsentligste forskel mellem WHERE
- og HAVING
-klausulerne, samt hvornår de skal 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 anvende HAVING
-klausulen korrekt. Lad os nu vende tilbage til opgaven, som skolen har givet os.
Swipe to start coding
Din opgave er at hente efternavne på elever, der har flere karakterer for skolen.
Du skal kun hente elevernes efternavne; der er ikke behov for at inkludere antallet af deres karakterer i svaret. Brug HAVING
-klausulen og den aggregerede funktion COUNT()
for at løse denne opgave. Sortér derefter efternavnene i alfabetisk rækkefølge.
Bemærk:
Der skal kun være én kolonne med efternavne i resultatet.
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
Awesome!
Completion rate improved to 4
HAVING-Klausul
Stryg for at vise menuen
Skolen er meget taknemmelig for dit arbejde, og nu har vi fået en ny opgave.
Det viser sig, at nogle elever har taget ekstra prøver, selvom de kun skulle have taget én. Skolen mistænker dem for snyd, fordi hver elev kun burde have én karakter.
Vi har fået til opgave at finde efternavnene på disse elever og videregive dem til skoleledelsen, så de kan tage de nødvendige foranstaltninger.
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 aggregatfunktioner inde i en WHERE
-klausul. Det er her, vi skal bruge HAVING
-klausulen.
Antag, 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 aggregatfunktion 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.
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 kolonnendepartment
.
Lad os se på den mere generaliserede syntaks for HAVING
-klausulen, og hvornår det er bedst at anvende den:
SELECT column1, column2... --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
Lad os også kort forstå den væsentligste forskel mellem WHERE
- og HAVING
-klausulerne, samt hvornår de skal 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 anvende HAVING
-klausulen korrekt. Lad os nu vende tilbage til opgaven, som skolen har givet os.
Swipe to start coding
Din opgave er at hente efternavne på elever, der har flere karakterer for skolen.
Du skal kun hente elevernes efternavne; der er ikke behov for at inkludere antallet af deres karakterer i svaret. Brug HAVING
-klausulen og den aggregerede funktion COUNT()
for at løse denne opgave. Sortér derefter efternavnene i alfabetisk rækkefølge.
Bemærk:
Der skal kun være én kolonne med efternavne i resultatet.
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!
Awesome!
Completion rate improved to 4single