문제
문제 설명
테이블: Contests, Colleges, Challenges, View_Stats, Submission_stats
조건: contest_id, hacker_id, name, total_submissions의 합, total_accepted_submissions의 합, total_views의 합, total_unique_views의 합을 출력해야 한다.
contest_id를 기준으로 정렬한다.
4개의 합계 모두 0일 경우 출력 결과에서 제외된다.
참고: 1Contest - N Colleges, 1 College - 1 Contest
문제 풀이
Join: Contents - Colleges, Colleges - Challenges,
left join: Challenges - View_Stats, View_Stats - Submission_Stats
여기서 left join은 왼쪽 테이블의 모든 레코드와 오른쪽 테이블이 일치된 레코드를 반환하게 하는 조인이다.
오른쪽 테이블에 왼쪽 테이블과 일치하는 항목이 없더라도 왼쪽 테이블의 모든 레코드를 반환한다. 일치하는 항목이 없으면 NULL이 입력된다.
(참고: https://www.w3schools.com/sql/sql_join_left.asp)
left join을 쓰는 이유는 값을 빼먹지 않기 위해서다.
그냥 조인을 쓰면 결과가 아래와 같이 나온다.
이건 left 조인 사용했을 때의 결과다. 비슷해 보이지만 sum 값들을 비교해 보면 값이 빠져서 합쳐진걸 볼 수 있다.
left join을 사용하는 이유는 테이블을 연결시킬 때 놓치는 값이 없게 하기 위해서인 것 같다.
답 (MySQL)