single
HAVING Clause
Swipe to show menu
The school information system is being reviewed to ensure data consistency and accuracy. As part of this review, a new data analysis task has been assigned.
During routine checks, it was discovered that some student records contain more than one grade entry, even though the system is designed to store only a single grade per student.
Your task is to help identify such cases for further internal review.
Think about how you can do this. You could start by considering that you can do this using a WHERE clause, and it would look something like this:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
But, as you can see, we get an error indicating that you cannot use aggregate functions inside a WHERE clause. This is where you'll need the HAVING clause.
Suppose you need to retrieve the departments where employees' average salary is below $70,000 per year.
To achieve this, we'll need to use an aggregate function and the HAVING clause:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
The result is one department in response using the HAVING clause, where a condition is set for the column by which used for grouping.
To use data aggregation within the HAVING clause, we need to have data grouping in our query. As in the query above, we grouped the data by the department column.
Here is more generalized syntax of the HAVING clause and when it's best to use it:
SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
-- This will cause an error
Here is a brief look at the main difference between WHERE and HAVING clauses and when to use each of them:
- The
WHEREclause is used before data aggregation, while theHAVINGclause is used after data aggregation; - The
WHEREclause is written beforeGROUP BY, while theHAVINGclause is written afterGROUP BY.
These are the two main differences you need to remember for successful use of the HAVING clause. Now, return to the task given to us by the school.
Swipe to start coding
Some students appear multiple times in the grade records, which indicates duplicate or unexpected entries in the system.
You need to retrieve the last names of all students whose records contain more than one grade entry. The result will be used by the school administration to review and correct the data if necessary.
Return only the list of last names that meet this condition, sorted alphabetically.
Brief Instructions
- Retrieve the
student_surnamecolumn. - Group the data by
student_surname. - Use the
HAVINGclause to filter the results based onCOUNT(grade) > 1. - Sort the results by
student_surname.
Solution
Thanks for your feedback!
single
Ask AI
Ask AI
Ask anything or try one of the suggested questions to begin our chat