배우기/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