tak's data blog

[SQL] HackerRank - Contest Leaderboard 본문

SQL

[SQL] HackerRank - Contest Leaderboard

hyuntaek 2022. 2. 12. 18:08

출처: https://www.hackerrank.com/challenges/contest-leaderboard/problem?isFullScreen=true

 

Contest Leaderboard | HackerRank

Generate the contest leaderboard.

www.hackerrank.com

 

다른 부분보다도 우선적으로 join에 대해서 공부하고 있습니다.

 

지난 시간에 이어서 이번에도 문제 풀이를 올려보도록 하겠습니다.

 

문제 : 

You did such a great job helping Julia with her last coding contest challenge that she wants you to work on this one, too!

The total score of a hacker is the sum of their maximum scores for all of the challenges. Write a query to print the hacker_id, name, and total score of the hackers ordered by the descending score. If more than one hacker achieved the same total score, then sort the result by ascending hacker_id. Exclude all hackers with a total score of  from your result.

Input Format

The following tables contain contest data:

  • Hackers: The hacker_id is the id of the hacker, and name is the name of the

Submissions: The submission_id is the id of the submission, hacker_id is the id of the hacker who made the submission, challenge_id is the id of the challenge for which the submission belongs to, and score is the score of the submission.

Hackers와 Submissions 2개의 테이블을 hacker_id로 연결해서 hacker가 푼 모든 문제에 대한 최대 점수의 합계를 구해야 합니다.

조건) 

- 각 hacker별 같은 문제에 대한 풀이점수가 2개일 때 최대 점수를 선택해주어야 하고

- 둘 이상의 hacker가 동일한 총점을 획득한 경우 hacker_id를 기준으로 오름차순 정렬합니다.

- 또한 총점이 0점인 해커는 결과에서 제거해야 합니다.

 

select
    h.hacker_id
,   h.name
,   sum(max.score) # 서브쿼리안에 생성한 문제별 최대score들의 합
from
    (
    select
        hacker_id
    ,   challenge_id
    ,   max(score) as score
    from
        submissions
    group by
        hacker_id
    ,   challenge_id
    ) as max # 각 hacker_id / 문제별 점수의 최대값을 서브쿼리로
    join hackers as h on max.hacker_id = h.hacker_id
group by
    h.hacker_id
,   h.name
having
    sum(max.score) > 0
order by
    sum(max.score) desc
,   h.hacker_id

 

처음 문제를 풀 때 같은 challenge에서 최대값을 구하는 부분에서 조금 막혔었지만 from절안에 max라는 최대score값을 구하는 서브쿼리를 생성하여 나머지 조건은 그대로 작성하며 해결할 수 있었습니다.

 

'SQL' 카테고리의 다른 글

[SQL] HackerRank - New Companies  (0) 2022.04.03
[SQL] HackerRank - Challenges  (0) 2022.03.17
[SQL] HackerRank - The Report  (1) 2022.02.11
Python SQL 연동  (0) 2021.04.12
PostgreSQL 문제풀이 8  (0) 2021.02.22