728x90
📚문제
https://www.hackerrank.com/challenges/interviews/problem?isFullScreen=true
문제가 길고 예제 테이블이 많아서 링크로 대체
📝풀이
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
'SQL > HackerRank (SQL문풀)' 카테고리의 다른 글
HackerRank / Alternative Queries / Print Prime Numbers / MySQL (0) | 2024.01.18 |
---|---|
HackerRank / Advanced Join / SQL Project Planning / MySQL (0) | 2024.01.17 |
Hackerrank / Basic Join / Ollivander's Inventory / MySQL (0) | 2024.01.10 |
Hackerrank / Basic Join / Top Competitors / MySQL (0) | 2024.01.09 |
**Hackerrank / Aggregation / Weather Observation Station 20 / MySQL ** (0) | 2024.01.08 |