배우기/SQL
HackerRank - Top Competitors (조인)_MySQL
인사잘해
2022. 4. 11. 23:11
안녕하세요!
- 문제
두 개 이상의 challenge에서 만점을 받은 hacker_id와 name을 찾는 쿼리를 작성한다.
결과는 만점을 얻은 challenge의 개수를 기준으로 내림차순 정렬하는데
두 명 이상일 경우에는 hacker_id를 기준으로 오름차순 정렬한다.
- 테이블
- 풀이
SELECT H.hacker_id, H.name
FROM Submissions S
INNER JOIN Challenges C ON S.challenge_id = C.challenge_id
INNER JOIN Difficulty D ON C.difficulty_level = D.difficulty_level
INNER JOIN Hackers H ON S.hacker_id = H.hacker_id
WHERE S.score = D.score AND C.difficulty_level = D.difficulty_level
GROUP BY H.hacker_id, H.name
HAVING COUNT(H.hacker_id) >= 2
ORDER BY COUNT(H.hacker_id) DESC, H.hacker_id
1. 각 해커가 참여한 challenge 와 획득한 score 를 알아야 한다.
- submissions 테이블과 challenges 테이블을 challenge_id 키로 조인
2. challenge 의 difficulty_level 에 따른 만점 기준을 알아야 한다.
- difficulty 테이블을 difficulty_level 키로 조인
3. hacker 의 name 을 알아야 한다.
- hackers 테이블을 hacker_id로 조인
4. submissions 테이블의 점수와 difficulty 테이블의 점수가 동일하면 만점,
이 때 difficulty_level 도 동일.
- where 절에 조건 작성
5. 두 개 이상의 challenge 에서 만점을 얻은 hacker_id 와 name 을 찾기 위한 함수 필요.
- group by 절에 hacker_id 와 name, having 절에 count 함수로 hacker_id 2개 이상 찾기
6. 정렬 순서는 문제에서 요구한대로 작성.
- 출처 : https://www.hackerrank.com/challenges/full-score/problem