본문 바로가기

SQL/HackerRank (SQL문풀)

** HackerRank / Advanced Join / Interviews / MySQL **

728x90

📚문제

https://www.hackerrank.com/challenges/interviews/problem?isFullScreen=true

 

Interviews | HackerRank

find total number of view, total number of unique views, total number of submissions and total number of accepted submissions.

www.hackerrank.com

문제가 길고 예제 테이블이 많아서 링크로 대체

 

📝풀이

SELECT con.contest_id
     , con.hacker_id
     , con.name
     , SUM(total_submissions)
     , SUM(total_accepted_submissions)
     , SUM(total_views)
     , SUM(total_unique_views)
FROM Contests con
JOIN Colleges col ON con.contest_id = col.contest_id
JOIN Challenges chal ON col.college_id = chal.college_id
LEFT JOIN View_Stats v ON chal.challenge_id = v.challenge_id
LEFT JOIN Submission_Stats s ON chal.challenge_id = s.challenge_id
GROUP BY con.contest_id, con.hacker_id, con.name
HAVING SUM(total_submissions) >0 
   OR SUM(total_accepted_submissions) >0
   OR SUM(total_views) >0
   OR SUM(total_unique_views) >0
ORDER BY con.contest_id

 

테이블을 자세히 보니

challenge 테이블에는 없는

challenge_id가 

View_Stats 테이블과 Submissioni_Stats테이블에 있는 경우도 있다

그래서 앞선 세테이블(Contests, Colleges, Challenges)을 JOIN한 다음에

나머지 테이블은 LEFT JOIN을 해주어야 한다

 

 

+ 근데 LEFT JOIN 하는것까지는 이해가 되는데

왜 View 테이블과 Submission 테이블을

그룹화해서 결과값을 다 구한 뒤에 

붙여야하는지는 이해가 잘 안 간다

어차피 contest테이블에 존재하는 

challenge_id가 더 적기 때문에 

LEFT JOIN하면

contest테이블에 없는 challenge_id는 빼고

계산되기 때문에 상관없는것 아닌가...?

 

계속 생각해봐도 모르겠다

728x90