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:
123SELECT 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:
1234SELECT 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:
SELECT column1, column2... --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
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_surnamekolonnen. - Gruppér dataene efter
student_surname. - Brug
HAVINGklausulen 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 write the correct SQL query to find the students with more than one grade?
Can you explain why the HAVING clause works in this scenario but WHERE does not?
Can you give another example of using HAVING with a different aggregate function?
Awesome!
Completion rate improved to 4
Having Klausul
Stryg for at vise menuen
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:
123SELECT 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:
1234SELECT 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:
SELECT column1, column2... --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
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_surnamekolonnen. - Gruppér dataene efter
student_surname. - Brug
HAVINGklausulen til at filtrere resultaterne baseret påCOUNT(grade) > 1. - Sortér resultaterne efter
student_surname.
Løsning
Tak for dine kommentarer!
single