Allen's 데이터 맛집

HackerRank lv. Medium : Contest Leaderboard 본문

SQL/SQL 문제풀이

HackerRank lv. Medium : Contest Leaderboard

Allen93 2024. 6. 16. 18:10

문제

 

 

 

풀이

Julia가 주최한 최근 코딩 대회에서 우수한 성적을 거둔 뒤, 이번에도 그녀의 요청으로 새로운 챌린지에 참여하게 되었습니다! 이번 문제는 각 해커의 챌린지별 최고 점수를 합산하여 해커의 총점을 계산하고, 이를 기반으로 리더보드를 생성하는 SQL 쿼리를 작성하는 것입니다. 

 

SELECT
    s.hacker_id,
    h.name,
    SUM(s.max_score) AS total_max_score
FROM
    (SELECT
        hacker_id,
        challenge_id,
        MAX(score) AS max_score
    FROM
        Submissions
    GROUP BY
        hacker_id, challenge_id
    ) s 
JOIN Hackers h ON s.hacker_id = h.hacker_id
GROUP BY
    s.hacker_id, h.name
HAVING
    total_max_score > 0
ORDER BY
    total_max_score DESC, s.hacker_id;

 

1. 내부 SELECT 절 (Subquery):
Submissions 테이블에서 각 해커(hacker_id)가 각 챌린지(challenge_id)에서 얻은 최고 점수(max_score)를 계산합니다.
이 데이터는 각 해커가 각 챌린지에서 얻을 수 있는 최대 점수만을 집계하기 위해 그룹화됩니다.


2. 외부 SELECT 절:
내부 쿼리에서 계산된 데이터를 Hackers 테이블과 조인하여 해커의 이름을 포함시킵니다.
해커별로 모든 챌린지에서의 최대 점수를 합산하여 총점(total_max_score)을 계산합니다.


3. HAVING 절:
총점이 0보다 큰 해커만 결과에 포함시키기 위해 사용됩니다. 이는 문제에서 총점이 0인 해커를 결과에서 제외하라는 요구사항을 충족시킵니다.


4. ORDER BY 절:
총점을 기준으로 내림차순으로 정렬하고, 총점이 같은 경우 hacker_id로 오름차순으로 추가 정렬하여 결과를 출력합니다.

 

 

https://www.hackerrank.com/challenges/contest-leaderboard/problem?isFullScreen=false

 

Contest Leaderboard | HackerRank

Generate the contest leaderboard.

www.hackerrank.com

 

728x90