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

bookHAVING-Klausul

Skolen er meget taknemmelig for dit arbejde, og nu har vi fået en ny opgave.

Det viser sig, at nogle elever har taget ekstra prøver, selvom de kun skulle have taget én. Skolen mistænker dem for snyd, fordi hver elev kun burde have én karakter.

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

Lad os overveje hvordan vi kan gøre dette. Du kan starte med at tænke på, at vi kan gøre dette ved hjælp af en WHERE-klausul, og det kunne 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 angiver, at vi ikke kan bruge aggregatfunktioner inde i en WHERE-klausul. Det er her, vi skal bruge HAVING-klausulen.

Antag, at vi skal hente de afdelinger, hvor medarbejdernes gennemsnitlige løn er under $70.000 om året. For at opnå dette skal vi bruge en aggregatfunktion og HAVING-klausulen:

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

Vi modtog én afdeling som svar ved brug af HAVING-klausulen, hvor vi angav 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 kolonnen department.

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

SELECT column1, column2... --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)

Lad os også kort forstå den væsentligste forskel mellem WHERE- og HAVING-klausulerne, samt hvornår de skal anvendes:

  1. WHERE-klausulen bruges før dataaggregering, mens HAVING-klausulen bruges efter dataaggregering;
  2. WHERE-klausulen skrives før GROUP BY, mens HAVING-klausulen skrives efter GROUP BY.

Dette er de to vigtigste forskelle, du skal huske for at anvende HAVING-klausulen korrekt. Lad os nu vende tilbage til opgaven, som skolen har givet os.

Opgave

Swipe to start coding

Din opgave er at hente efternavne på elever, der har flere karakterer for skolen.

Du skal kun hente elevernes efternavne; der er ikke behov for at inkludere antallet af deres karakterer i svaret. Brug HAVING-klausulen og den aggregerede funktion COUNT() for at løse denne opgave. Sortér derefter efternavnene i alfabetisk rækkefølge.

Bemærk:

Der skal kun være én kolonne med efternavne i resultatet.

Korte instruktioner

  • Hent kolonnen student_surname.
  • 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

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 6
single

single

Spørg AI

expand

Spørg AI

ChatGPT

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

close

Awesome!

Completion rate improved to 4

bookHAVING-Klausul

Stryg for at vise menuen

Skolen er meget taknemmelig for dit arbejde, og nu har vi fået en ny opgave.

Det viser sig, at nogle elever har taget ekstra prøver, selvom de kun skulle have taget én. Skolen mistænker dem for snyd, fordi hver elev kun burde have én karakter.

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

Lad os overveje hvordan vi kan gøre dette. Du kan starte med at tænke på, at vi kan gøre dette ved hjælp af en WHERE-klausul, og det kunne 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 angiver, at vi ikke kan bruge aggregatfunktioner inde i en WHERE-klausul. Det er her, vi skal bruge HAVING-klausulen.

Antag, at vi skal hente de afdelinger, hvor medarbejdernes gennemsnitlige løn er under $70.000 om året. For at opnå dette skal vi bruge en aggregatfunktion og HAVING-klausulen:

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

Vi modtog én afdeling som svar ved brug af HAVING-klausulen, hvor vi angav 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 kolonnen department.

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

SELECT column1, column2... --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)

Lad os også kort forstå den væsentligste forskel mellem WHERE- og HAVING-klausulerne, samt hvornår de skal anvendes:

  1. WHERE-klausulen bruges før dataaggregering, mens HAVING-klausulen bruges efter dataaggregering;
  2. WHERE-klausulen skrives før GROUP BY, mens HAVING-klausulen skrives efter GROUP BY.

Dette er de to vigtigste forskelle, du skal huske for at anvende HAVING-klausulen korrekt. Lad os nu vende tilbage til opgaven, som skolen har givet os.

Opgave

Swipe to start coding

Din opgave er at hente efternavne på elever, der har flere karakterer for skolen.

Du skal kun hente elevernes efternavne; der er ikke behov for at inkludere antallet af deres karakterer i svaret. Brug HAVING-klausulen og den aggregerede funktion COUNT() for at løse denne opgave. Sortér derefter efternavnene i alfabetisk rækkefølge.

Bemærk:

Der skal kun være én kolonne med efternavne i resultatet.

Korte instruktioner

  • Hent kolonnen student_surname.
  • 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!

close

Awesome!

Completion rate improved to 4
Sektion 1. Kapitel 6
single

single

some-alt