HAVING-Setning
Skoleinformasjonssystemet gjennomgås for å sikre datakonsistens og nøyaktighet. Som en del av denne gjennomgangen er det tildelt en ny dataanalyseoppgave.
Under rutinemessige kontroller ble det oppdaget at enkelte elevregistre inneholder mer enn én karakteroppføring, selv om systemet er utformet for å lagre kun én karakter per elev.
Din oppgave er å bidra til å identifisere slike tilfeller for videre intern gjennomgang.
La oss tenke sammen på hvordan vi kan gjøre dette. Du kan starte med å vurdere at vi kan gjøre dette ved å bruke en WHERE-setning, og det vil se omtrent slik ut:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Men, som du kan se, 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.
For å bruke dataaggregering i HAVING-klausulen, må vi ha datagruppering i spørringen. Som i spørringen ovenfor, grupperte vi dataene etter kolonnen department.
Her er en mer generell syntaks for HAVING-klausulen og når det er mest hensiktsmessig å 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-klausuler, 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 har fått av skolen.
Swipe to start coding
Noen elever vises flere ganger i karakterregistrene, noe som indikerer dupliserte eller uventede oppføringer i systemet.
Du skal hente etternavnene til alle elever som har mer enn én karakteroppføring i registrene. Resultatet skal brukes av skoleadministrasjonen for å gjennomgå og eventuelt korrigere dataene.
Returner kun listen over etternavn som oppfyller dette kriteriet, sortert alfabetisk.
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
Can you show me how to use the HAVING clause to find students with multiple grade entries?
Can you explain why the HAVING clause works in this scenario but WHERE does not?
Can you provide an example query for the school task using HAVING?
Fantastisk!
Completion rate forbedret til 4
HAVING-Setning
Sveip for å vise menyen
Skoleinformasjonssystemet gjennomgås for å sikre datakonsistens og nøyaktighet. Som en del av denne gjennomgangen er det tildelt en ny dataanalyseoppgave.
Under rutinemessige kontroller ble det oppdaget at enkelte elevregistre inneholder mer enn én karakteroppføring, selv om systemet er utformet for å lagre kun én karakter per elev.
Din oppgave er å bidra til å identifisere slike tilfeller for videre intern gjennomgang.
La oss tenke sammen på hvordan vi kan gjøre dette. Du kan starte med å vurdere at vi kan gjøre dette ved å bruke en WHERE-setning, og det vil se omtrent slik ut:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Men, som du kan se, 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.
For å bruke dataaggregering i HAVING-klausulen, må vi ha datagruppering i spørringen. Som i spørringen ovenfor, grupperte vi dataene etter kolonnen department.
Her er en mer generell syntaks for HAVING-klausulen og når det er mest hensiktsmessig å 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-klausuler, 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 har fått av skolen.
Swipe to start coding
Noen elever vises flere ganger i karakterregistrene, noe som indikerer dupliserte eller uventede oppføringer i systemet.
Du skal hente etternavnene til alle elever som har mer enn én karakteroppføring i registrene. Resultatet skal brukes av skoleadministrasjonen for å gjennomgå og eventuelt korrigere dataene.
Returner kun listen over etternavn som oppfyller dette kriteriet, sortert alfabetisk.
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