SQL: CROSS JOIN과 LEFT JOIN 동시에 활용하기

2024. 9. 5. 10:19전처리/SQL

 

01 문제 URL


Students and Examinations - LeetCode

 

02 작성 코드


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

 

03 인사이트


1. 첫 번째로 학생 정보별, 과목별 모든 경우의 수를 포함하는 CROSS JOIN 테이블을 만든다.

 

 

2. 해당 테이블을 기준으로 아래 Examinations 테이블을 LEFT JOIN 하기: CROSS JOIN된 테이블이 기준이라 없는 경우는 NULL이 아닌 0으로 체크된다.

 

 

3. Examinations 테이블은 각각 다른 테이블을 참고하고 있기 때문에 ON 조건을 두 개 추가한다.

 

 

ON ST.student_id = EX.student_id
AND SU.subject_name = EX.subject_name

 

4. 학생 번호, 이름, 과목이 중복되기 때문에 GROUP BY 그룹화 시켜서 COUNT한다.