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

Sveip for å vise menyen

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

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

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:

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

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 etter department-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:

  1. WHERE-klause brukes før dataaggregering, mens HAVING-klause brukes etter dataaggregering;

  2. WHERE-klause skrives førGROUP BY, mens HAVING-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.

Oppgave

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

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
Vi beklager at noe gikk galt. Hva skjedde?

Spør AI

expand
ChatGPT

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

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

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

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:

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

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 etter department-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:

  1. WHERE-klause brukes før dataaggregering, mens HAVING-klause brukes etter dataaggregering;

  2. WHERE-klause skrives førGROUP BY, mens HAVING-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.

Oppgave

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

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
Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Vi beklager at noe gikk galt. Hva skjedde?
some-alt