홍동이의 성장일기

[HackerRank] Contest Leaderboard 본문

Tool/SQL 코딩테스트 풀이

[HackerRank] Contest Leaderboard

홍동2 2023. 9. 16. 17:55

 

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
            , challenge_id
            , MAX(score) score_max
    FROM submissions
    GROUP BY 1,2
) s
INNER JOIN hackers h
ON s.hacker_id = h.hacker_id
GROUP BY 1,2
HAVING total_score <> 0
ORDER BY 3 DESC, 1

 

 

💡 문제풀이

 

1. hacker_id와 challenge_id별로 가장 높은 score을 구한다.

SELECT hacker_id
        , challenge_id
        , MAX(score) score_max
FROM submissions
GROUP BY 1,2

 

 

2. hacker의 name을 표시하기 위해 JOIN을 해준다.

SELECT *
FROM(
    SELECT hacker_id
            , challenge_id
            , MAX(score) score_max
    FROM submissions
    GROUP BY 1,2
) s
INNER JOIN hackers h
ON s.hacker_id = h.hacker_id

 

 

3. hacker_id와 name별로 max(score)의 합을 구한다.

SELECT h.hacker_id
        , h.name
        , SUM(score_max) total_score
FROM(
    SELECT hacker_id
            , challenge_id
            , MAX(score) score_max
    FROM submissions
    GROUP BY 1,2
) s
INNER JOIN hackers h
ON s.hacker_id = h.hacker_id
GROUP BY 1,2

 

 

4. 문제가 제시한 조건을 추가해준다.

HAVING total_score <> 0
ORDER BY 3 DESC, 1

 

  • score의 총 합이 0인 경우 제외한다.
  • score의 합이 큰 것부터 나타내고, 동점인 경우 hacker_id 순으로 정렬한다.

문제를 풀 때 with구문, partition by 구문에서 계속 syntax 오류가 발생했다.

해커랭크에서는 위 두 구문이 사용이 안되는건지 궁금하다 🤔

 

📍본 내용은  '[백문이불여일타] 데이터 분석을 위한 고급 SQL 문제풀이'를  수강하며 작성한 내용입니다.

728x90

'Tool > SQL 코딩테스트 풀이' 카테고리의 다른 글

[HackerRank] Occupations  (1) 2023.10.02
[HackerRank] New Companies  (0) 2023.09.30
[HackerRank] Weather Observation Station 17  (0) 2023.09.16
[LeetCode] 1321. Restaurant Growth  (0) 2023.08.24
[LeetCode] 178. Rank Scores  (0) 2023.08.24
Comments