Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Having Klausul | Gruppering
Mellemliggende SQL

Stryg for at vise menuen

book
Having Klausul

Skolen er meget taknemmelig for dit arbejde, og nu er der en ny opgave til os.

Det viser sig, at nogle elever tog ekstra eksamener, da de kun skulle tage én. Skolen mistænker dem for snyd, fordi hver elev kun bør have én karakter.

Vi har fået til opgave at få efternavnene på disse elever og videregive dem til skoleadministrationen, så de kan tage de nødvendige skridt.

Lad os tænke sammen over hvordan vi kan gøre dette. Du kunne starte med at overveje, at vi kan gøre dette ved hjælp af en WHERE klausul, og det ville se sådan ud:

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

Men, som du kan se, får vi en fejl, der indikerer, at vi ikke kan bruge aggregeringsfunktioner inde i en WHERE klausul. Dette er, hvor vi har brug for HAVING klausulen.

Lad os sige, at vi har brug for at hente de afdelinger, hvor medarbejdernes gennemsnitlige løn er under $70,000 om året. For at opnå dette, skal vi bruge en aggregeringsfunktion og HAVING klausulen:

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

Vi modtog en afdeling som svar ved hjælp af HAVING-klausulen, hvor vi satte en betingelse for kolonnen, som vi grupperede dataene efter.

Bemærk

For at bruge dataaggregering inden for HAVING-klausulen, skal vi have datagruppering i vores forespørgsel. Som i forespørgslen ovenfor grupperede vi dataene efter department-kolonnen.

Lad os se på den mere generaliserede syntaks for HAVING-klausulen og hvornår det er bedst at bruge den:

sql

Lad os også kort forstå den vigtigste forskel mellem WHERE og HAVING-klausulerne og hvornår man skal bruge hver af dem:

  1. WHERE-klausulen bruges før dataaggregering, mens HAVING-klausulen bruges efter dataaggregering;

  2. WHERE-klausulen skrives førGROUP BY, mens HAVING-klausulen skrives efterGROUP BY.

Dette er de to vigtigste forskelle, du skal huske for at bruge HAVING-klausulen med succes. Nu, lad os vende tilbage til opgaven givet til os af skolen.

Opgave

Swipe to start coding

Din opgave vil være at hente efternavnene på elever, der har flere karakterer for skolen.

Du behøver kun at hente efternavnene på eleverne; der er ikke behov for at inkludere antallet af deres karakterer i svaret. Brug HAVING klausulen og COUNT() aggregeringsfunktionen til at udføre denne opgave. Sorter derefter efternavnene i alfabetisk rækkefølge.

Bemærk:

Du skal kun have én kolonne med efternavne i resultatet.

Korte instruktioner

  • Hent student_surname kolonnen.
  • Gruppér dataene efter student_surname.
  • Brug HAVING klausulen til at filtrere resultaterne baseret på COUNT(grade) > 1.
  • Sortér resultaterne efter student_surname.

Løsning

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 6
Vi beklager, at noget gik galt. Hvad skete der?

Spørg AI

expand
ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

book
Having Klausul

Skolen er meget taknemmelig for dit arbejde, og nu er der en ny opgave til os.

Det viser sig, at nogle elever tog ekstra eksamener, da de kun skulle tage én. Skolen mistænker dem for snyd, fordi hver elev kun bør have én karakter.

Vi har fået til opgave at få efternavnene på disse elever og videregive dem til skoleadministrationen, så de kan tage de nødvendige skridt.

Lad os tænke sammen over hvordan vi kan gøre dette. Du kunne starte med at overveje, at vi kan gøre dette ved hjælp af en WHERE klausul, og det ville se sådan ud:

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

Men, som du kan se, får vi en fejl, der indikerer, at vi ikke kan bruge aggregeringsfunktioner inde i en WHERE klausul. Dette er, hvor vi har brug for HAVING klausulen.

Lad os sige, at vi har brug for at hente de afdelinger, hvor medarbejdernes gennemsnitlige løn er under $70,000 om året. For at opnå dette, skal vi bruge en aggregeringsfunktion og HAVING klausulen:

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

Vi modtog en afdeling som svar ved hjælp af HAVING-klausulen, hvor vi satte en betingelse for kolonnen, som vi grupperede dataene efter.

Bemærk

For at bruge dataaggregering inden for HAVING-klausulen, skal vi have datagruppering i vores forespørgsel. Som i forespørgslen ovenfor grupperede vi dataene efter department-kolonnen.

Lad os se på den mere generaliserede syntaks for HAVING-klausulen og hvornår det er bedst at bruge den:

sql

Lad os også kort forstå den vigtigste forskel mellem WHERE og HAVING-klausulerne og hvornår man skal bruge hver af dem:

  1. WHERE-klausulen bruges før dataaggregering, mens HAVING-klausulen bruges efter dataaggregering;

  2. WHERE-klausulen skrives førGROUP BY, mens HAVING-klausulen skrives efterGROUP BY.

Dette er de to vigtigste forskelle, du skal huske for at bruge HAVING-klausulen med succes. Nu, lad os vende tilbage til opgaven givet til os af skolen.

Opgave

Swipe to start coding

Din opgave vil være at hente efternavnene på elever, der har flere karakterer for skolen.

Du behøver kun at hente efternavnene på eleverne; der er ikke behov for at inkludere antallet af deres karakterer i svaret. Brug HAVING klausulen og COUNT() aggregeringsfunktionen til at udføre denne opgave. Sorter derefter efternavnene i alfabetisk rækkefølge.

Bemærk:

Du skal kun have én kolonne med efternavne i resultatet.

Korte instruktioner

  • Hent student_surname kolonnen.
  • Gruppér dataene efter student_surname.
  • Brug HAVING klausulen til at filtrere resultaterne baseret på COUNT(grade) > 1.
  • Sortér resultaterne efter student_surname.

Løsning

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 6
Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Vi beklager, at noget gik galt. Hvad skete der?
some-alt