tak's data blog
[SQL] HackerRank - Contest Leaderboard 본문
출처: https://www.hackerrank.com/challenges/contest-leaderboard/problem?isFullScreen=true
다른 부분보다도 우선적으로 join에 대해서 공부하고 있습니다.
지난 시간에 이어서 이번에도 문제 풀이를 올려보도록 하겠습니다.
문제 :
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 from your result.
Input Format
The following tables contain contest data:
- Hackers: The hacker_id is the id of the hacker, and name is the name of the
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.
Hackers와 Submissions 2개의 테이블을 hacker_id로 연결해서 hacker가 푼 모든 문제에 대한 최대 점수의 합계를 구해야 합니다.
조건)
- 각 hacker별 같은 문제에 대한 풀이점수가 2개일 때 최대 점수를 선택해주어야 하고
- 둘 이상의 hacker가 동일한 총점을 획득한 경우 hacker_id를 기준으로 오름차순 정렬합니다.
- 또한 총점이 0점인 해커는 결과에서 제거해야 합니다.
select
h.hacker_id
, h.name
, sum(max.score) # 서브쿼리안에 생성한 문제별 최대score들의 합
from
(
select
hacker_id
, challenge_id
, max(score) as score
from
submissions
group by
hacker_id
, challenge_id
) as max # 각 hacker_id / 문제별 점수의 최대값을 서브쿼리로
join hackers as h on max.hacker_id = h.hacker_id
group by
h.hacker_id
, h.name
having
sum(max.score) > 0
order by
sum(max.score) desc
, h.hacker_id
처음 문제를 풀 때 같은 challenge에서 최대값을 구하는 부분에서 조금 막혔었지만 from절안에 max라는 최대score값을 구하는 서브쿼리를 생성하여 나머지 조건은 그대로 작성하며 해결할 수 있었습니다.
'SQL' 카테고리의 다른 글
[SQL] HackerRank - New Companies (0) | 2022.04.03 |
---|---|
[SQL] HackerRank - Challenges (0) | 2022.03.17 |
[SQL] HackerRank - The Report (1) | 2022.02.11 |
Python SQL 연동 (0) | 2021.04.12 |
PostgreSQL 문제풀이 8 (0) | 2021.02.22 |