WITH
Majors AS (
SELECT major, COUNT(course_id) AS course_count
FROM Courses
GROUP BY 1
),
StudentMetadata AS (
SELECT
Students.student_id,
Students.major,
SUM(
Students.major = Courses.major
AND Enrollments.grade = 'A'
) AS major_grade_a_count
FROM Students
INNER JOIN Courses
USING (major)
INNER JOIN Enrollments
USING (student_id, course_id)
GROUP BY 1
)
SELECT StudentMetadata.student_id
FROM StudentMetadata
INNER JOIN Majors
ON (
StudentMetadata.major = Majors.major
AND StudentMetadata.major_grade_a_count = Majors.course_count)
ORDER BY 1;