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한다.
'전처리 > SQL' 카테고리의 다른 글
SQL: DATEDIFF, SUBDATE 활용 방법의 차이 (feat. join문제) (1) | 2024.09.12 |
---|---|
SQL: SELF JOIN 활용하는 문제 풀이 (output보며 이해) (0) | 2024.09.12 |
SQL: DISTINCT와 GROUP BY (0) | 2024.07.11 |
SQL: 특정기간 동안 대여할 자동차들의 한 달 대여비용 (0) | 2024.07.03 |
조건에 부합하는 중고거래 댓글 조회하기 (0) | 2024.06.25 |