문제 링크
https://leetcode.com/problems/students-and-examinations/
문제
각 학생이 각 시험에 참여한 횟수를 구해라. 없으면 0으로 출력. student_id와 subject_name으로 정렬해라.
- keyword : CROSS JOIN, LEFT JOIN, GROUP BY
풀이
처음엔 Subjects 테이블을 사용안하고 풀 수 있나 했는데 0도 출력하기 위해서 CROSS JOIN할 때 사용했다.
- COUNT 할 때, Examinations 테이블의 student_id로 해야 제대로 카운트된다.
- GROUP BY 할 때, student_id, subject_name만 사용해도 가능했지만 세 개 다 써주는게 실행시간이 빨랐다.
SELECT A.student_id, A.student_name, B.subject_name, COUNT(C.student_id) AS attended_exams
FROM Students A CROSS JOIN Subjects B LEFT JOIN Examinations C
ON A.student_id = C.student_id AND B.subject_name = C.subject_name
GROUP BY student_id, student_name, subject_name
ORDER BY student_id, subject_name;