본문 바로가기
SQL/SQL test

[HackerRank] Contest Leaderboard

by ISLA! 2024. 1. 16.

 

Basic Join / Intermediate

 

문제

  • hacker_id, name, 총 점수를 쿼리
  • 총 점수는 challenge_id 별로 가장 높은 값을 합산 한 것(해커별로)
  • 총 점수 기준으로 내림차순 후, 동일한 점수라면 hacker_id 기준으로 정렬
  • 단, 총 점수가 0인 해커는 제외

 


풀이

  • FROM 절에 서브쿼리 : 먼저 hacker_id, challenge_id 별로 가장 높은 점수를 얻어내고 그 값을 합산해야한다.
    • Submission 테이블만 사용하며, hacker_id, challenge_id 기준으로 Groupby 
    • MAX(score) 값 도출
  • 위의 서브쿼리와 Hackers 테이블을 JOIN
  • SELECT 절에 도출이 필요한 컬럼 hacker_id, name, SUM(max_score)를 나열
    • hacker_id, name 를 기준으로 Groupby
  • HAVING 절에 총 점수가 0 이 아닌 값 지정
  • ORDER BY로 마무리
SELECT B.hacker_id, name,
       SUM(max_score) as totalscore
FROM(
    SELECT hacker_id, Challenge_id,
           MAX(score) as max_score
    FROM Submissions
    GROUP BY 1, 2) A
INNER JOIN Hackers as B on A.hacker_id = B.hacker_id
GROUP BY 1, 2
HAVING totalscore != 0
ORDER BY 3 DESC, 1
728x90