Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære HAVING-Setning | Gruppering
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Videregående SQL

bookHAVING-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:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

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:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

Vi mottok én avdeling som svar ved bruk av HAVING-klausulen, hvor vi setter en betingelse for kolonnen vi grupperte dataene etter.

Note
Merk

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:

  1. WHERE-klausulen brukes før dataaggregering, mens HAVING-klausulen brukes etter dataaggregering;
  2. WHERE-klausulen skrives før GROUP BY, mens HAVING-klausulen skrives etter GROUP 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.

Oppgave

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

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 6
single

single

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

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?

close

bookHAVING-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:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

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:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

Vi mottok én avdeling som svar ved bruk av HAVING-klausulen, hvor vi setter en betingelse for kolonnen vi grupperte dataene etter.

Note
Merk

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:

  1. WHERE-klausulen brukes før dataaggregering, mens HAVING-klausulen brukes etter dataaggregering;
  2. WHERE-klausulen skrives før GROUP BY, mens HAVING-klausulen skrives etter GROUP 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.

Oppgave

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

Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 6
single

single

some-alt