Problem Statement
Table: Enrollment
This table records the enrollments of students in various courses. Each record includes a student ID and a course ID.
+--------------+---------+
| Column Name | Type |
+--------------+---------+
| student_id | int |
| course_id | int |
+--------------+---------+
This table may contain duplicate rows.
student_id is not NULL.
course_id is a foreign key to the Course table.Table: Course
This table lists all the courses available.
+--------------+---------+
| Column Name | Type |
+--------------+---------+
| course_id | int |
+--------------+---------+
course_id is the primary key for this table.Develop a solution to identify the student IDs from the Enrollment table who have enrolled in all the courses listed in the Course table.
Return the result table in any order.
Example
Input:
Enrollment table:
+------------+-----------+
| student_id | course_id |
+------------+-----------+
| 100 | 200 |
| 200 | 300 |
| 300 | 200 |
| 300 | 300 |
| 100 | 300 |
+------------+-----------+Course table:
+-----------+
| course_id |
+-----------+
| 200 |
| 300 |
+-----------+Output:
+------------+
| student_id |
+------------+
| 100 |
| 300 |
+------------+Try It Yourself
Database Exercise
Database Schema:
-- Database schema would be rendered hereExercise Script:
-- Exercise script would be rendered hereAvailable actions: Execute
Solution
To identify students who have enrolled in all available courses, we need to compare the number of distinct courses each student has enrolled in with the total number of courses offered. This approach ensures that only those students who have enrolled in every course are selected.
- Determine Total Number of Courses: Calculate the total count of distinct courses available in the
Coursetable. - Count Student Enrollments: For each student, count the number of distinct courses they have enrolled in from the
Enrollmenttable. - Compare and Select Eligible Students: Select students whose count of enrolled courses matches the total number of courses, indicating full enrollment.
- Order the Results: Present the final list of student IDs in any order as specified.
SQL Query
SELECT student_id
FROM Enrollment
GROUP BY student_id
HAVING COUNT(DISTINCT course_id) = (SELECT COUNT(*) FROM Course)
ORDER BY student_idStep-by-Step Approach
Step 1: Determine Total Number of Courses
Calculate the total number of distinct courses available in the Course table to establish the benchmark for full enrollment.
SQL Query:
SELECT COUNT(*) AS total_courses
FROM Course;Explanation:
SELECT COUNT(*) AS total_courses:- Counts all the rows in the
Coursetable, effectively determining the total number of courses available.
- Counts all the rows in the
Output After Step 1:
+--------------+
| total_courses|
+--------------+
| 2 |
+--------------+Step 2: Count Student Enrollments
For each student, count the number of distinct courses they have enrolled in to assess whether they meet the full enrollment criteria.
SQL Query:
SELECT student_id, COUNT(DISTINCT course_id) AS enrolled_courses
FROM Enrollment
GROUP BY student_id;Explanation:
-
SELECT student_id, COUNT(DISTINCT course_id) AS enrolled_courses:- Retrieves each
student_idalong with the count of uniquecourse_ids they have enrolled in.
- Retrieves each
-
FROM Enrollment:- Specifies the
Enrollmenttable as the data source.
- Specifies the
-
GROUP BY student_id:- Aggregates the data by
student_idto perform the count for each individual student.
- Aggregates the data by
Output After Step 2:
+------------+-----------------+
| student_id | enrolled_courses|
+------------+-----------------+
| 100 | 2 |
| 200 | 1 |
| 300 | 2 |
+------------+-----------------+Step 3: Compare and Select Eligible Students
Identify students whose number of enrolled courses matches the total number of available courses, indicating that they have enrolled in all courses.
SQL Query:
SELECT student_id
FROM Enrollment
GROUP BY student_id
HAVING COUNT(DISTINCT course_id) = (SELECT COUNT(*) FROM Course);Explanation:
-
SELECT student_id:- Chooses the
student_idof students who meet the enrollment criteria.
- Chooses the
-
FROM Enrollment:- Utilizes the
Enrollmenttable as the data source.
- Utilizes the
-
GROUP BY student_id:- Groups the records by
student_idto perform aggregate calculations for each student.
- Groups the records by
-
HAVING COUNT(DISTINCT course_id) = (SELECT COUNT(*) FROM Course):-
Filters the grouped students to include only those whose count of distinct enrolled courses equals the total number of courses available.
-
COUNT(DISTINCT course_id): Counts the unique courses each student has enrolled in. -
(SELECT COUNT(*) FROM Course): Subquery that retrieves the total number of courses from theCoursetable.
-
Final Output:
+------------+
| student_id |
+------------+
| 100 |
| 300 |
+------------+