Having-Klausul
Skolan är väldigt tacksam för ditt arbete, och nu finns det en ny uppgift för oss.
Det visar sig att några elever tog extra prov när de bara skulle ta 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 till skoladministrationen så att de kan vidta de åtgärder de anser nödvändiga.
Låt oss tänka tillsammans på hur vi kan göra detta. Du kan börja med att överväga att vi kan göra detta med en WHERE
-sats, och det skulle se ut ungefär så här:
SELECT 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 inuti en WHERE
klausul. Det är här vi behöver HAVING
klausulen.
Låt oss säga att vi behöver hämta avdelningarna där 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
klausulen:
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Vi fick ett avdelningssvar med hjälp av HAVING
-satsen, där vi ställde ett villkor för kolumnen genom vilken vi grupperade data.
Notera
För att använda dataaggregering inom
HAVING
-satsen, behöver vi ha datagruppering i vår fråga. Som i frågan ovan, grupperade vi data efterdepartment
-kolumnen.
Låt oss titta på den mer allmänna syntaxen för HAVING
-satsen och när det är bäst att använda den:
sql
Låt oss också kort förstå den stora skillnaden mellan WHERE
och HAVING
-satser 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
.
Dessa är de två huvudsakliga skillnaderna du behöver komma ihåg för att framgångsrikt använda HAVING
-satsen. Nu, låt oss återgå till uppgiften som skolan gav oss.
Swipe to start coding
Din uppgift är att hämta efternamnen på studenter som har flera betyg för skolan.
Du behöver bara hämta studenternas efternamn; det finns inget behov av att inkludera antalet av deras betyg i svaret. Använd HAVING
-klasulen och COUNT()
-aggregeringsfunktionen för att utföra denna uppgift. Sortera sedan efternamnen i alfabetisk ordning.
Notera:
Du bör ha endast en kolumn med efternamn i resultatet.
Kortfattade instruktioner
- Hämta kolumnen
student_surname
. - Gruppera data efter
student_surname
. - Använd
HAVING
-klasulen för att filtrera resultaten baserat påCOUNT(grade) > 1
. - Sortera resultaten efter
student_surname
.
Lösning
Tack för dina kommentarer!