본문 바로가기
SQL

[SQL 코테 풀이] HackerRank - Contest Leaderboard (DIFFICULTY : Medium, SKILL : Intermediate, MySQL)

by _땅콩 2024. 3. 22.

난이도가 낮은 문제로 자신감을 채우고 나니 훨씬 낫다!

비록 여전히 영어 지문을 번역해서 풀고 있긴 하지만, 스스로 풀어냈다.

내일 아침부터 다시 문제를 지속적으로 풀어보면 더 익숙해지고 발전할 수 있겠다는 생각이 든다.


 

문제

DIFFICULTY : Medium, SKILL : Intermediate, MySQL


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 0 from your result.

문제해석
1) 해커의 총 점수는 모든 도전 과제에 대한 최대 점수의 합이다.
2) HACKER_ID, NAME, TOTAL SCORE를 출력한다.
3) 해커의 총 점수는 내림차순으로 정렬하고,
     두 명 이상의 해커가 동일한 총 점수를 달성한 경우  HACKER_ID를 오름차순으로 정렬한다.
4) 총 점수가 0인 모든 해커는 결과에서 제외한다.

 

 

INPUT 테이블

The following tables contain contest data:

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

 


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. 

 

 

OUTPUT 결과 샘플

 

Explanation
Hacker 4071 submitted solutions for challenges 19797 and 49593, so the total score = 95 + max(43, 96) = 191.
Hacker 74842 submitted solutions for challenges 19797 and 63132, so the total score = max(98, 5) + 76 = 174
Hacker 84072 submitted solutions for challenges 49593 and 63132, so the total score = 100 + 0 = 100.
The total scores for hackers 4806, 26071, 80305, and 49438 can be similarly calculated.

 


SQL CODE

SELECT H.HACKER_ID, H.NAME
     , SUM(S.SCORE) AS SCORE
  FROM HACKERS H
  JOIN (
      SELECT HACKER_ID, CHALLENGE_ID, MAX(SCORE) AS SCORE
        FROM SUBMISSIONS
       GROUP BY HACKER_ID, CHALLENGE_ID
       ) S
    ON H.HACKER_ID = S.HACKER_ID
 GROUP BY H.HACKER_ID, H.NAME
 HAVING SUM(S.SCORE) != 0
 ORDER BY SUM(S.SCORE) DESC, H.HACKER_ID ASC
;

 

 

SQL 결과

76971 Ashley 760 
84200 Susan 710 
76615 Ryan 700 
82382 Sara 640 
79034 Marilyn 580 
78552 Harry 570 
74064 Helen 540 
78688 Sean 540 
83832 Jason 540 
72796 Jose 510 
.
.
.

 

 

 


느낀점/개선점

추가 조사  
느낀점  
개선점