HAVING-Setning
Skolen er svært takknemlig for arbeidet ditt, og nå har vi fått en ny oppgave.
Det viser seg at noen elever har tatt ekstra eksamener når de egentlig bare skulle ta én. Skolen mistenker dem for juks, fordi hver elev skal ha kun én karakter.
Vi har fått i oppdrag å finne etternavnene til disse elevene og sende dem videre til skoleadministrasjonen, slik at de kan ta de tiltakene de mener er nødvendige.
La oss tenke sammen på hvordan vi kan gjøre dette. Du kan begynne med å vurdere at vi kan gjøre dette ved å bruke en WHERE
-setning, og det ville sett omtrent slik ut:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Men, som du ser, får vi en feilmelding som indikerer at vi ikke kan bruke aggregeringsfunksjoner inne i en WHERE
-setning. Dette er grunnen til at vi trenger HAVING
-setningen.
La oss si at vi må hente avdelingene der de ansattes gjennomsnittlige lønn er under $70,000 per år.
For å oppnå dette, må vi bruke en aggregeringsfunksjon og HAVING
-setningen:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Vi mottok én avdeling som svar ved bruk av HAVING
-klausulen, hvor vi setter en betingelse for kolonnen vi grupperte dataene etter.
Merk
For å bruke dataaggregering i
HAVING
-klausulen, må vi ha datagruppering i spørringen vår. Som i spørringen ovenfor, grupperte vi dataene etter kolonnendepartment
.
La oss se på den mer generelle syntaksen for HAVING
-klausulen og når det er best å bruke den:
SELECT column1, column2... --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
La oss også kort forstå hovedforskjellen mellom WHERE
- og HAVING
-klausulene og når hver av dem skal brukes:
WHERE
-klausulen brukes før dataaggregering, mensHAVING
-klausulen brukes etter dataaggregering;WHERE
-klausulen skrives førGROUP BY
, mensHAVING
-klausulen skrives etterGROUP BY
.
Dette er de to viktigste forskjellene du må huske for å bruke HAVING
-klausulen riktig. Nå kan vi gå tilbake til oppgaven vi fikk av skolen.
Swipe to start coding
Din oppgave er å hente etternavnene til elever som har flere karakterer for skolen.
Du skal kun hente etternavnene til elevene; det er ikke nødvendig å inkludere antall karakterer i svaret. Bruk HAVING
-setningen og den aggregerte funksjonen COUNT()
for å løse denne oppgaven. Deretter skal etternavnene sorteres i alfabetisk rekkefølge.
Merk:
Resultatet skal inneholde kun én kolonne med etternavn.
Korte instruksjoner
- Hent kolonnen
student_surname
. - Grupper dataene etter
student_surname
. - Bruk
HAVING
-setningen for å filtrere resultatene basert påCOUNT(grade) > 1
. - Sorter resultatene etter
student_surname
.
Løsning
Takk for tilbakemeldingene dine!
single
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 4
HAVING-Setning
Sveip for å vise menyen
Skolen er svært takknemlig for arbeidet ditt, og nå har vi fått en ny oppgave.
Det viser seg at noen elever har tatt ekstra eksamener når de egentlig bare skulle ta én. Skolen mistenker dem for juks, fordi hver elev skal ha kun én karakter.
Vi har fått i oppdrag å finne etternavnene til disse elevene og sende dem videre til skoleadministrasjonen, slik at de kan ta de tiltakene de mener er nødvendige.
La oss tenke sammen på hvordan vi kan gjøre dette. Du kan begynne med å vurdere at vi kan gjøre dette ved å bruke en WHERE
-setning, og det ville sett omtrent slik ut:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Men, som du ser, får vi en feilmelding som indikerer at vi ikke kan bruke aggregeringsfunksjoner inne i en WHERE
-setning. Dette er grunnen til at vi trenger HAVING
-setningen.
La oss si at vi må hente avdelingene der de ansattes gjennomsnittlige lønn er under $70,000 per år.
For å oppnå dette, må vi bruke en aggregeringsfunksjon og HAVING
-setningen:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Vi mottok én avdeling som svar ved bruk av HAVING
-klausulen, hvor vi setter en betingelse for kolonnen vi grupperte dataene etter.
Merk
For å bruke dataaggregering i
HAVING
-klausulen, må vi ha datagruppering i spørringen vår. Som i spørringen ovenfor, grupperte vi dataene etter kolonnendepartment
.
La oss se på den mer generelle syntaksen for HAVING
-klausulen og når det er best å bruke den:
SELECT column1, column2... --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
La oss også kort forstå hovedforskjellen mellom WHERE
- og HAVING
-klausulene og når hver av dem skal brukes:
WHERE
-klausulen brukes før dataaggregering, mensHAVING
-klausulen brukes etter dataaggregering;WHERE
-klausulen skrives førGROUP BY
, mensHAVING
-klausulen skrives etterGROUP BY
.
Dette er de to viktigste forskjellene du må huske for å bruke HAVING
-klausulen riktig. Nå kan vi gå tilbake til oppgaven vi fikk av skolen.
Swipe to start coding
Din oppgave er å hente etternavnene til elever som har flere karakterer for skolen.
Du skal kun hente etternavnene til elevene; det er ikke nødvendig å inkludere antall karakterer i svaret. Bruk HAVING
-setningen og den aggregerte funksjonen COUNT()
for å løse denne oppgaven. Deretter skal etternavnene sorteres i alfabetisk rekkefølge.
Merk:
Resultatet skal inneholde kun én kolonne med etternavn.
Korte instruksjoner
- Hent kolonnen
student_surname
. - Grupper dataene etter
student_surname
. - Bruk
HAVING
-setningen for å filtrere resultatene basert påCOUNT(grade) > 1
. - Sorter resultatene etter
student_surname
.
Løsning
Takk for tilbakemeldingene dine!
Awesome!
Completion rate improved to 4single