코딩테스트/코딩테스트 SQL

[HackerRank] Top Competitors

sseozytank 2022. 8. 22.

 

💡문제

 

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

댓글