본문 바로가기
SQL

[SQL] HackerRank - Contest Leaderboard

by 다람이도토리 2021. 9. 1.
문제 출처
https://www.hackerrank.com/challenges/contest-leaderboard/problem?isFullScreen=true

문제 설명

Hackers table, Submission Table이 주어진다.

제출 데이터에서 유저별로 얻은 최종 득점(과제별 최고점의 합)을 계산 후,

Hacker table과 결합하여 해커id, 해커 이름, 최종 점수를 고득점자 순서대로 나열한다. (동률일 경우 해커 이름 사전순)

이 때, 합산 점수가 0점인 해커는 제외된다.

 

풀이

과제별로 Max를 얻는 부분부터 나눠야 한다. 해당 테이블을 얻어서 join 시킬 생각을 해야 한다.

즉 작은 서브쿼리부터 만들어 해결하면 쉽다.

SELECT a.hacker_id, a.name, b.total_score
FROM hackers as a
LEFT JOIN 
    (SELECT hacker_id, SUM(max_score) AS total_score
    FROM (
        SELECT hacker_id, challenge_id, MAX(score) as max_score
        FROM submissions
        GROUP BY hacker_id, challenge_id
        ) subq
     GROUP BY hacker_id
     ) as b
ON a.hacker_id = b.hacker_id
WHERE b.total_score > 0
ORDER BY b.total_score DESC, hacker_id ASC