SQL/HackerRank
[MySQL/HackerRank] Top Competitors 문제풀이
레아킴
2022. 5. 22. 00:56
반응형
https://www.hackerrank.com/challenges/full-score/problem
Top Competitors | HackerRank
Query a list of top-scoring hackers.
www.hackerrank.com
만점을 받은 challenge가 2개 이상인 해커를 구하는 문제이다.
그리고 만점 받은 전체 challenge 의 수로 정렬해야한다. ( 개수가 같을 경우, hacker_id로 오름차순으로 정렬하기)
우선,
1. Submissions table에 3개의 테이블을 조인을 하고 Submissions 테이블에서 score가 만점인 데이터만 가져오도록 where에 조건을 걸었다.
2. Group by 로 hacker_id로 묶어줘야하는데 h.name도 출력해야하기 때문에 h.name도 같이 묶는다.
(SELECT 절에는 GROUP BY에 쓰인 column만 사용가능하다.)
3. Having 절을 이용하여 만점알 받은 challenge가 2개 이상이도록 조건을 추가해주었다.
4. 그 다음, COUNT(hacker_id), hacker_id로 정렬해주었다.
풀이
SELECT h.hacker_id, h.name
FROM Submissions as s
INNER JOIN Hackers as h On s.hacker_id = h.hacker_id
INNER JOIN Challenges AS c ON c.challenge_id = s.challenge_id
INNER JOIN difficulty AS d ON d.difficulty_level = c.difficulty_level
WHERE d.score = s.score
GROUP BY h.hacker_id, h.name
HAVING COUNT(s.hacker_id ) > 1
ORDER BY count(s.hacker_id) desc, s.hacker_id asc
반응형