율코딩

[MySQL/HackerRank] Top Competitors 문제풀이 본문

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
반응형
Comments