596. Classes More Than 5 Students
Problem Description
Table: Courses
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| student | varchar |
| class | varchar |
+-------------+---------+
(student, class) is the primary key column for this table.
Each row of this table indicates the name of a student and the class in which they are enrolled.
Write an SQL query to report all the classes that have at least five students.
Return the result table in any order.
Example:
Input:
Courses table:
+---------+----------+
| student | class |
+---------+----------+
| A | Math |
| B | English |
| C | Math |
| D | Biology |
| E | Math |
| F | Computer |
| G | Math |
| H | Math |
| I | Math |
+---------+----------+
Output:
+---------+
| class |
+---------+
| Math |
+---------+
Explanation:
- Math has 6 students, so we include it.
- English has 1 student, so we do not include it.
- Biology has 1 student, so we do not include it.
- Computer has 1 student, so we do not include it.
Solution
MySQL Solution
SELECT class
FROM Courses
GROUP BY class
HAVING COUNT(DISTINCT student) >= 5;
PostgreSQL Solution
SELECT class
FROM Courses
GROUP BY class
HAVING COUNT(DISTINCT student) >= 5;
MS SQL Server Solution
SELECT class
FROM Courses
GROUP BY class
HAVING COUNT(DISTINCT student) >= 5;
Oracle Solution
SELECT class
FROM Courses
GROUP BY class
HAVING COUNT(DISTINCT student) >= 5;
Approach Explanation
The solution uses GROUP BY and HAVING clauses:
- Key Insights:
- Group by class
- Count distinct students
- Filter by count
- Handle duplicates
- Query Steps:
- Group records by class
- Count unique students
- Filter groups with HAVING
- Select class names
Implementation Details:
- GROUP BY clause
- HAVING clause
- COUNT with DISTINCT
- Simple projection
Optimization Insights:
- Use of DISTINCT
- Efficient grouping
- No subqueries needed
- No joins required
Edge Cases:
- Empty table
- Duplicate entries
- Exactly 5 students
- NULL values