Having-Klausul
Skolen er veldig takknemlig for arbeidet ditt, og nå er det en ny oppgave for oss.
Det viser seg at noen studenter tok ekstra eksamener når de skulle ta bare én. Skolen mistenker dem for juks fordi hver student skal ha bare én karakter.
Vi har fått i oppgave å få etternavnene til disse studentene og gi dem videre til skoleadministrasjonen slik at de kan ta de nødvendige tiltakene.
La oss tenke sammen om hvordan vi kan gjøre dette. Du kan begynne med å vurdere at vi kan gjøre dette ved å bruke en WHERE
-klausul, og det vil se slik ut:
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Men, som du kan se, får vi en feil som indikerer at vi ikke kan bruke aggregeringsfunksjoner inne i en WHERE
-klausul. Dette er hvor vi trenger HAVING
-klausulen.
La oss si at vi trenger å hente avdelingene der de ansattes gjennomsnittlige lønn er under $70,000 per år.
For å oppnå dette, må vi bruke en aggregeringsfunksjon og HAVING
-klausulen:
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Vi mottok ett avdelingsresultat ved å bruke HAVING
-klause, hvor vi satte en betingelse for kolonnen som vi grupperte dataene etter.
Merk
For å bruke dataaggregering innenfor
HAVING
-klause, må vi ha datagruppering i vår spørring. Som i spørringen ovenfor, grupperte vi dataene etterdepartment
-kolonnen.
La oss se på den mer generaliserte syntaksen for HAVING
-klause og når det er best å bruke den:
sql
La oss også kort forstå den viktigste forskjellen mellom WHERE
og HAVING
-klause og når man skal bruke hver av dem:
WHERE
-klause brukes før dataaggregering, mensHAVING
-klause brukes etter dataaggregering;WHERE
-klause skrives førGROUP BY
, mensHAVING
-klause skrives etterGROUP BY
.
Dette er de to viktigste forskjellene du må huske for å bruke HAVING
-klause med suksess. Nå, la oss gå tilbake til oppgaven gitt til oss av skolen.
Swipe to start coding
Din oppgave vil være å hente etternavnene til studenter som har flere karakterer for skolen.
Du trenger bare å hente etternavnene til studentene; det er ikke nødvendig å inkludere antallet av deres karakterer i svaret. Bruk HAVING
-klausulen og COUNT()
-aggregeringsfunksjonen for å utføre denne oppgaven. Sorter deretter etternavnene i alfabetisk rekkefølge.
Merk:
Du bør ha kun én kolonne med etternavn i resultatet.
Korte Instruksjoner
- Hent
student_surname
-kolonnen. - Grupper dataene etter
student_surname
. - Bruk
HAVING
-klausulen for å filtrere resultatene basert påCOUNT(grade) > 1
. - Sorter resultatene etter
student_surname
.
Løsning
Takk for tilbakemeldingene dine!