문제 https://www.hackerrank.com/challenges/contest-leaderboard/problem

 

Contest Leaderboard | HackerRank

Generate the contest leaderboard.

www.hackerrank.com

 

쿼리

SELECT h.hacker_id, h.name, SUM(score_max) total_score
FROM (
    SELECT hacker_id, MAX(score) score_max                   # 2
    FROM Submissions
    GROUP BY hacker_id, challenge_id                            # 1
) t JOIN Hackers h ON h.hacker_id = t.hacker_id              # 3
GROUP BY h.hacker_id, h.name                                    # 4
HAVING total_score !=0
ORDER BY total_score DESC, h.hacker_id

 

설명

 

- FROM 에 있는 서브쿼리를 먼저 설명함.

- #1 : 해커 당 challenge_id 의 최대 score 를 계산하기 위해,

  group by 를 이용하여 hacker_id, challenge_id 로 계산.

- #2 : select 문으로 필요한 hacker_id 와 max(score) 를 추출한다.

- #3 : hacker 의 이름을 쿼리할 수 있도록, hacker_id 를 기준으로 join.

  그럼 hacker_id 에 따른 이름을 쿼리할 수 있음.

- #4 : hacker_id와 name을 기준으로 group by 함.

  왜냐면 select 할 때 hacker_id 와 name 을 출력해야하니까.

- 나머지 조건들을 충족시킨 이후에 원하는 정보를 쿼리하면 됨.

- group by 를 어떻게 잘 쓰느냐가 중요한 문제였음 

 

 

 

 

 

 

 

+ Recent posts