Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Having-Klausul | Gruppering
Intermediär SQL

Svep för att visa menyn

book
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:

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

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:

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 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 efter department-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:

  1. WHERE-satsen används före dataaggregering, medan HAVING-satsen används efter dataaggregering;

  2. WHERE-satsen skrivs föreGROUP BY, medan HAVING-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.

Uppgift

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

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

Fråga AI

expand
ChatGPT

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

book
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:

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

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:

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 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 efter department-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:

  1. WHERE-satsen används före dataaggregering, medan HAVING-satsen används efter dataaggregering;

  2. WHERE-satsen skrivs föreGROUP BY, medan HAVING-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.

Uppgift

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

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
Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Vi beklagar att något gick fel. Vad hände?
some-alt