♟️ 알고리즘/Leetcode

[MySQL][Leet Code] 1280. Students and Examinations (Easy)

Jerry_K 2025. 2. 17. 23:56

https://leetcode.com/problems/students-and-examinations/?envType=study-plan-v2&envId=top-sql-50


🗒️SQL 코드 풀이 

SELECT ST.student_id, ST.student_name, SB.subject_name, COUNT(EX.subject_name) AS attended_exams 
    FROM 
        Students ST 
    CROSS JOIN 
        Subjects SB
    LEFT JOIN
        Examinations EX
    ON ST.student_id = EX.student_id AND SB.subject_name  = EX.subject_name 
    GROUP BY ST.student_id, ST.student_name, SB.subject_name 
    ORDER BY ST.student_id, SB.subject_name

 

1. 아래의 테이블을 만들기 위해 Students & Subjects 테이블 간 CROSS JOIN을 한다. 

 

2. 이후 student_id와 student_name을 기준으로 Students 테이블에 LEFT JOIN을 한다. 

그러면 아래와 같은 Output이 나온다.

 

3. 이제 GROUP BY를 해주는데, ST.student_id, ST.student_name, SB.subject_name을 기준으로 해야한다. 

만일 여기에서 SB를 EX와 같은 것으로 하면 원하는 Ouput을 얻지 못한다. 

 

4. 이후 ORDER BY로 정렬 및 SELECT로 출력을 하면 된다. 

 

 

📌 문제 코멘트 

쉽지 않은 문제였던 것 같다. 

우선 CROSS JOIN을 생각해내지 못해 LEFT JOIN으로 했다. 

그리고 해당 풀이처럼 깔끔하지 풀어내지 못했다 . 

 

가장 큰 문제점은 어떤 테이블의 컬럼인지를 명확하게 구분하지 못했다.

ST.student_id인지 , EX. student_id 인지 ... 

이거를 명확하게 생각해내지 못하면 원하는 답을 도출하지 못하니 주의해야겠다.


📚문제