https://www.hackerrank.com/challenges/contest-leaderboard/problem?isFullScreen=true
줄리아가 코딩 콘테스트를 주최했다. 해커의 총 점수는 모든 챌린지에 대한 최대 점수의 합계이며, 총 점수를 기준으로 내림차순하여 hacker_id, name, score를 출력하는 쿼리를 작성하자. 하지만 만약 두명 이상의 해커가 동일한 점수를 얻었을 경우에는 hacker_id를 기준으로 오름차순하여 결과를 정렬하고, 총 점수가 0점인 해커의 결과는 제외시키자.
TABLE NAME : Hackers
TABLE NAME : Submissions
1) 궁극적으로 구하고 싶은건 모든 챌린지에 대한 최대 점수의 합계값이지만 먼저 maximum scores를 구하자.
2) 앞선 단계에서 구한 것을 FROM절에 넣고 이제 hacker_id 를 기준으로 더해준다.
3) name을 구해야 하니까 name 이 있는 테이블과 조인해주고, 이름도 group by 기준에 넣어준다.
총 점수가 0점인 해커의 결과는 제외시키기 위해 HAVING 절을 써준다.
ORDER BY 조건은 total score of the hackers ordered by the DESC, hacker_id ASC
SELECT m.hacker_id, h.name, SUM(m.score)AS total
FROM
(SELECT hacker_id, challenge_id, MAX(score) AS score
FROM Submissions
GROUP BY hacker_id, challenge_id) m
INNER JOIN Hackers h ON h.hacker_id = m.hacker_id
GROUP BY hacker_id, h.name
HAVING SUM(m.score) > 0
ORDER BY total DESC, m.hacker_id