Having Klausul
Skolen er meget taknemmelig for dit arbejde, og nu er der en ny opgave til os.
Det viser sig, at nogle elever tog ekstra eksamener, da de kun skulle tage én. Skolen mistænker dem for snyd, fordi hver elev kun bør have én karakter.
Vi har fået til opgave at få efternavnene på disse elever og videregive dem til skoleadministrationen, så de kan tage de nødvendige skridt.
Lad os tænke sammen over hvordan vi kan gøre dette. Du kunne starte med at overveje, at vi kan gøre dette ved hjælp af en WHERE
klausul, og det ville se sådan ud:
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Men, som du kan se, får vi en fejl, der indikerer, at vi ikke kan bruge aggregeringsfunktioner inde i en WHERE
klausul. Dette er, hvor vi har brug for HAVING
klausulen.
Lad os sige, at vi har brug for at 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:
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Vi modtog en afdeling som svar ved hjælp af HAVING
-klausulen, hvor vi satte 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 efterdepartment
-kolonnen.
Lad os se på den mere generaliserede syntaks for HAVING
-klausulen og hvornår det er bedst at bruge den:
sql
Lad os også kort forstå den vigtigste forskel mellem WHERE
og HAVING
-klausulerne og hvornår man skal bruge hver af dem:
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 med succes. Nu, lad os vende tilbage til opgaven givet til os af skolen.
Swipe to start coding
Din opgave vil være at hente efternavnene på elever, der har flere karakterer for skolen.
Du behøver kun at hente efternavnene på eleverne; der er ikke behov for at inkludere antallet af deres karakterer i svaret. Brug HAVING
klausulen og COUNT()
aggregeringsfunktionen til at udføre denne opgave. Sorter derefter efternavnene i alfabetisk rækkefølge.
Bemærk:
Du skal kun have én kolonne med efternavne i resultatet.
Korte instruktioner
- Hent
student_surname
kolonnen. - 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!