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 인지 ...
이거를 명확하게 생각해내지 못하면 원하는 답을 도출하지 못하니 주의해야겠다.