single
HAVING-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 studentposter innehåller mer än en betygspost, trots att systemet är utformat för att lagra endast ett betyg per student.
Din uppgift är att hjälpa till att identifiera sådana fall för vidare intern granskning.
Fundera på hur du kan göra detta. Du kan börja med att överväga att du 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 felmeddelande som indikerar att du inte kan använda aggregeringsfunktioner i en WHERE-sats. Det är här du behöver använda HAVING-satsen.
Anta att du 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
Resultatet är en avdelning i svaret med hjälp av HAVING-satsen, där ett villkor anges för kolumnen som används för gruppering.
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 det är bäst att använda den:
SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
-- This will cause an error
Här är en kort översikt över huvudskillnaden mellan WHERE- och HAVING-satser samt när du ska använda var och en av dem:
WHERE-satsen används innan dataaggregering, medanHAVING-satsen används efter dataaggregering;WHERE-satsen skrivs föreGROUP BY, medanHAVING-satsen skrivs efterGROUP BY.
Detta är de två viktigaste skillnaderna du behöver komma ihåg för att använda HAVING-satsen framgångsrikt. Återgå nu till uppgiften vi fick av skolan.
Svep för att börja koda
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, sorterad 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
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