알고리즘/해커랭크

[MySql/Join] HackerRank Contest Leaderborad

waterground 2022. 1. 14. 15:38

1. 문제

https://www.hackerrank.com/challenges/contest-leaderboard/problem?isFullScreen=true&h_r=next-challenge&h_v=zen 

 

Contest Leaderboard | HackerRank

Generate the contest leaderboard.

www.hackerrank.com

 

2. 풀이

  • 학생별 + 챌린지별로 점수의 최댓값을 구한 후 그 값을 더해줘야 한다.
  • 따라서, 학생별 챌린지별로 점수의 최댓값을 먼저 구한후 hacker 테이블과 join해 점수의 합을 구한다.
  • 점수의 최댓값이 0일 경우 제외하며, 정렬 순서에 유의한다.

 

3. 코드

select h.hacker_id, h.name, sum(score)
from (
    select hacker_id, challenge_id, max(score) as score
    from submissions
    group by hacker_id, challenge_id) t
join hackers as h on t.hacker_id=h.hacker_id
group by h.hacker_id, h.name
having sum(score) > 0
order by sum(score) desc, h.hacker_id;