LeetCodee

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:

  1. Key Insights:
    • Group by class
    • Count distinct students
    • Filter by count
    • Handle duplicates
  2. 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