💡문제
Top Competitors | HackerRank
Query a list of top-scoring hackers.
www.hackerrank.com
💡문제 요약
1. 두 개 이상의 챌린지에서 만점을 달성한 hacker_id와 name을 출력
2-1. 만점을 달성한 챌린지의 수 대로 해커 아이디 내림차순 정렬
2-2. 만점을 달성한 챌린지의 수가 같은 해커가 있으면, 해커 아이디로 오름차순 정렬한다.
💡풀이 방법
1. submissions 이라는 가장 큰 테이블에 inner join 으로 필요한 컬럼들을 조인한다.
2.full score를 달성한 해커를 찾기 위해 where절로 조건을 걸어준다.
3.문제 해설 1번에서 두 개 이상의 챌린지라는 조건을 만족시키고자 , having으로 조건을 제한한다.
4.문제가 원하는 조건에 따라 정렬해준다.
select s.hacker_id, name
from submissions s
join hackers h on s.hacker_id = h.hacker_id
join challenges c on s.challenge_id = c.challenge_id
join difficulty d on c.difficulty_level = d.difficulty_level
where s.score = d.score
group by 1,2
having count(s.hacker_id)>1
order by count(s.challenge_id)desc , s.hacker_id
💡고찰
📄처음에 그룹바이를 안쓰고 distinct를 썼다가, 2개 이상 챌린지를 완수한 해커들이라는 조건을 만족시키지 못해서
group by로 바꾸고 having으로 조건절을 걸어주었다.
📄order by에 집계함수를 써도 되는지 몰랐는데, 이번 문제를 풀면서 알 수 있게 되었다.
'코딩테스트 > 코딩테스트 SQL' 카테고리의 다른 글
[HackerRank] Placements (0) | 2022.09.26 |
---|---|
[HackerRank] The Blunder (0) | 2022.08.23 |
[HackerRank] Contest Leaderboard (0) | 2022.08.23 |
댓글