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

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

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

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:

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.

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 kolonnen department.

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:

  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 fikk av skolen.

Oppgave

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

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

close

Awesome!

Completion rate improved to 4

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

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

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:

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.

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 kolonnen department.

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:

  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 fikk av skolen.

Oppgave

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

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!

close

Awesome!

Completion rate improved to 4
Seksjon 1. Kapittel 6
single

single

some-alt