홍동이의 성장일기
[HackerRank] Contest Leaderboard 본문
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