CROSS JOIN

Jiyeong Kim·2025년 3월 18일

MySQL

목록 보기
4/4

1280. Students and Examinations

문제를 풀이하는 방식을 잘못이해했다.
시험을 친 부분에 대해서만 카운트하면 된다고 생각했는데,
예시에는 모든 경우의 수가 필요했다.
모든 경우의 수에 대한 컬럼을 만들고, 시험을 치지 않은 경우에는 0으로 카운트하는 방식으로 풀어야했다.

때문에 LEFT JOIN을 한 나와 달리 대부분의 사람들이 CROSS JOIN으로 문제를 풀었는데,

크로스 조인이 뭔데.. 상태가 되어서 기록한다.

CROSS JOIN

알고보니 단순 조인이었다.

단순 조인보다 CROSS JOIN이 더 직관적인 듯하긴한다.

모든 컬럼간의 Cartesian Product 카테시안 곱(집합)을 만들어내는데,

위의 문제는 사진처럼 common column이 없기 때문에 모든 경우의 수를 만들어내는 cross join을 사용하는것이 합리적인 방법인듯 했다.

SELECT s.student_id, s.student_name, sub.subject_name, COUNT(e.subject_name) AS attended_exams
FROM Students s
CROSS JOIN Subjects sub
LEFT JOIN Examinations e ON s.student_id = e.student_id AND sub.subject_name = e.subject_name
GROUP BY s.student_id, s.student_name, sub.subject_name
ORDER BY s.student_id, sub.subject_name;
  • 동일 컬럼이 있는 examination은 left join을, 없는 subject는 cross join으로 연결
  • 그룹 바이로 s.student_id, s.student_name, sub.subject_name 모두를 구분해준다.
profile
해봅시다

0개의 댓글