HAVING-satsen
Skolan är mycket tacksam för ditt arbete, och nu har vi fått en ny uppgift.
Det visar sig att vissa elever har gjort extra prov när de egentligen bara skulle göra ett. Skolan misstänker dem för fusk eftersom varje elev bara ska ha ett betyg.
Vi har fått i uppdrag att hämta efternamnen på dessa elever och lämna dem vidare till skolledningen så att de kan vidta lämpliga åtgärder.
Låt oss fundera tillsammans på hur vi kan göra detta. Du kan börja med att tänka på att vi kan göra detta med en WHERE
-sats, och det skulle se ut ungefär så här:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Men, som du kan se, får vi ett fel 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:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Vi fick ett avdelningssvar med hjälp av HAVING
-satsen, där vi anger ett villkor för kolumnen som vi grupperade data efter.
Observera
För att använda dataaggregering inom
HAVING
-satsen måste vi ha datagruppering i vår fråga. Precis som i frågan ovan grupperade vi data efter kolumnendepartment
.
Låt oss titta på den mer generaliserade syntaxen för HAVING
-satsen och när det är bäst att använda den:
SELECT column1, column2... --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
Låt oss också kort förstå huvudskillnaden mellan WHERE
- och HAVING
-satserna och när man ska använda var och en av dem:
WHERE
-satsen används före dataaggregering, medanHAVING
-satsen används efter dataaggregering;WHERE
-satsen skrivs föreGROUP BY
, medanHAVING
-satsen skrivs efterGROUP BY
.
Detta är de två huvudsakliga 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.
Swipe to start coding
Din uppgift är att hämta efternamnen på elever som har flera betyg för skolan.
Du behöver endast hämta elevernas efternamn; det finns ingen anledning att inkludera antalet betyg i svaret. Använd HAVING
-satsen och den aggregerande funktionen COUNT()
för att utföra denna uppgift. Sortera sedan efternamnen i alfabetisk ordning.
Obs:
Resultatet ska innehålla endast en kolumn med efternamn.
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
Tack för dina kommentarer!
single
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 4
HAVING-satsen
Svep för att visa menyn
Skolan är mycket tacksam för ditt arbete, och nu har vi fått en ny uppgift.
Det visar sig att vissa elever har gjort extra prov när de egentligen bara skulle göra ett. Skolan misstänker dem för fusk eftersom varje elev bara ska ha ett betyg.
Vi har fått i uppdrag att hämta efternamnen på dessa elever och lämna dem vidare till skolledningen så att de kan vidta lämpliga åtgärder.
Låt oss fundera tillsammans på hur vi kan göra detta. Du kan börja med att tänka på att vi kan göra detta med en WHERE
-sats, och det skulle se ut ungefär så här:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Men, som du kan se, får vi ett fel 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:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Vi fick ett avdelningssvar med hjälp av HAVING
-satsen, där vi anger ett villkor för kolumnen som vi grupperade data efter.
Observera
För att använda dataaggregering inom
HAVING
-satsen måste vi ha datagruppering i vår fråga. Precis som i frågan ovan grupperade vi data efter kolumnendepartment
.
Låt oss titta på den mer generaliserade syntaxen för HAVING
-satsen och när det är bäst att använda den:
SELECT column1, column2... --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
Låt oss också kort förstå huvudskillnaden mellan WHERE
- och HAVING
-satserna och när man ska använda var och en av dem:
WHERE
-satsen används före dataaggregering, medanHAVING
-satsen används efter dataaggregering;WHERE
-satsen skrivs föreGROUP BY
, medanHAVING
-satsen skrivs efterGROUP BY
.
Detta är de två huvudsakliga 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.
Swipe to start coding
Din uppgift är att hämta efternamnen på elever som har flera betyg för skolan.
Du behöver endast hämta elevernas efternamn; det finns ingen anledning att inkludera antalet betyg i svaret. Använd HAVING
-satsen och den aggregerande funktionen COUNT()
för att utföra denna uppgift. Sortera sedan efternamnen i alfabetisk ordning.
Obs:
Resultatet ska innehålla endast en kolumn med efternamn.
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
Tack för dina kommentarer!
Awesome!
Completion rate improved to 4single