Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Having-sats | Gruppering
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Intermediär SQL

bookHaving-sats

Informationssystemet för skolan granskas för att säkerställa datakonsistens och noggrannhet. Som en del av denna granskning har en ny dataanalysuppgift tilldelats.

Vid rutinmässiga kontroller upptäcktes att vissa elevposter innehåller mer än en betygspost, trots att systemet är utformat för att lagra endast ett betyg per elev.

Din uppgift är att hjälpa till att identifiera sådana fall för vidare intern granskning.

Låt oss fundera tillsammans på hur vi kan göra detta. Du kan börja med att överväga att vi kan göra detta med hjälp av en WHERE-sats, och det skulle se ut ungefär så här:

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

Men, som du kan se, får vi ett felmeddelande som indikerar att vi inte kan använda aggregeringsfunktioner i en WHERE-sats. Det är här vi behöver använda HAVING-satsen.

Anta att vi behöver hämta de avdelningar där de anställdas genomsnittliga lön är under $70,000 per år. För att uppnå detta behöver vi använda en aggregeringsfunktion och HAVING-satsen:

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

Vi fick ett avdelningssvar med hjälp av HAVING-satsen, där vi anger ett villkor för kolumnen som vi grupperade data efter.

Note
Observera

För att använda dataaggregering inom HAVING-satsen måste vi ha datagruppering i vår fråga. Som i frågan ovan grupperade vi data efter kolumnen department.

Här är en mer generell syntax för HAVING-satsen och när den är mest lämplig att använda:

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

Låt oss också kortfattat förstå huvudskillnaden mellan WHERE- och HAVING-satserna samt när var och en ska användas:

  1. WHERE-satsen används innan dataaggregering, medan HAVING-satsen används efter dataaggregering;
  2. WHERE-satsen skrivs före GROUP BY, medan HAVING-satsen skrivs efter GROUP BY.

Detta är de två viktigaste skillnaderna du behöver komma ihåg för att använda HAVING-satsen framgångsrikt. Nu återgår vi till uppgiften som skolan har gett oss.

Uppgift

Swipe to start coding

Vissa studenter förekommer flera gånger i betygsregistren, vilket indikerar dubbletter eller oväntade poster i systemet.

Du behöver hämta efternamnen på alla studenter vars poster innehåller mer än en betygspost. Resultatet kommer att användas av skoladministrationen för att granska och korrigera data vid behov.

Returnera endast listan med efternamn som uppfyller detta villkor, sorterade i alfabetisk ordning.

Kortfattade instruktioner

  • Hämta kolumnen student_surname.
  • Gruppera data efter student_surname.
  • Använd HAVING-satsen för att filtrera resultaten baserat på COUNT(grade) > 1.
  • Sortera resultaten efter student_surname.

Lösning

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 6
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

close

bookHaving-sats

Svep för att visa menyn

Informationssystemet för skolan granskas för att säkerställa datakonsistens och noggrannhet. Som en del av denna granskning har en ny dataanalysuppgift tilldelats.

Vid rutinmässiga kontroller upptäcktes att vissa elevposter innehåller mer än en betygspost, trots att systemet är utformat för att lagra endast ett betyg per elev.

Din uppgift är att hjälpa till att identifiera sådana fall för vidare intern granskning.

Låt oss fundera tillsammans på hur vi kan göra detta. Du kan börja med att överväga att vi kan göra detta med hjälp av en WHERE-sats, och det skulle se ut ungefär så här:

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

Men, som du kan se, får vi ett felmeddelande som indikerar att vi inte kan använda aggregeringsfunktioner i en WHERE-sats. Det är här vi behöver använda HAVING-satsen.

Anta att vi behöver hämta de avdelningar där de anställdas genomsnittliga lön är under $70,000 per år. För att uppnå detta behöver vi använda en aggregeringsfunktion och HAVING-satsen:

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

Vi fick ett avdelningssvar med hjälp av HAVING-satsen, där vi anger ett villkor för kolumnen som vi grupperade data efter.

Note
Observera

För att använda dataaggregering inom HAVING-satsen måste vi ha datagruppering i vår fråga. Som i frågan ovan grupperade vi data efter kolumnen department.

Här är en mer generell syntax för HAVING-satsen och när den är mest lämplig att använda:

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

Låt oss också kortfattat förstå huvudskillnaden mellan WHERE- och HAVING-satserna samt när var och en ska användas:

  1. WHERE-satsen används innan dataaggregering, medan HAVING-satsen används efter dataaggregering;
  2. WHERE-satsen skrivs före GROUP BY, medan HAVING-satsen skrivs efter GROUP BY.

Detta är de två viktigaste skillnaderna du behöver komma ihåg för att använda HAVING-satsen framgångsrikt. Nu återgår vi till uppgiften som skolan har gett oss.

Uppgift

Swipe to start coding

Vissa studenter förekommer flera gånger i betygsregistren, vilket indikerar dubbletter eller oväntade poster i systemet.

Du behöver hämta efternamnen på alla studenter vars poster innehåller mer än en betygspost. Resultatet kommer att användas av skoladministrationen för att granska och korrigera data vid behov.

Returnera endast listan med efternamn som uppfyller detta villkor, sorterade i alfabetisk ordning.

Kortfattade instruktioner

  • Hämta kolumnen student_surname.
  • Gruppera data efter student_surname.
  • Använd HAVING-satsen för att filtrera resultaten baserat på COUNT(grade) > 1.
  • Sortera resultaten efter student_surname.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 6
single

single

some-alt