[SQL] HACKERRANK - TOP COMPETITORS

2023. 3. 31. 16:42공부/SQL

https://www.hackerrank.com/challenges

PROBLEM

Julia just finished conducting a coding contest, and she needs your help assembling the leaderboard! Write a query to print the respective hacker_id and name of hackers who achieved full scores for more than one challenge. Order your output in descending order by the total number of challenges in which the hacker earned a full score. If more than one hacker received full scores in same number of challenges, then sort them by ascending hacker_id.

 

해석 :

 해커의 아이디와 이름을 출력하는 쿼리를 작성해야하는데, 조건은 MORE THAN ONE = 2개 이상의 CHALLENGE에서 FULL SCORE를 받은 해커여야 한다. 그리고 정렬 조건은 만점받은 TOTAL NUMBER OF CHALLENGE 내림차순이다. 만약 한명 이상의 해커가 같은 CHALLENGE에서 만점을 받았다면 THEN SORT THEM 해커아이디 오름차순으로 정렬하라!

SOLUTION

위와 같은 테이블이 존재한다고 가정하자. 문제를 해결하기 위해서는 각 CHALLENGE의 FULL SCORE가 몇점인지 알아야한다  = > DEFFICULTY 테이블이 조인해야하는데 요건 CHALLENGE 테이블에서 DIFFICULTY LEVEL 컬럼이랑 공통된다~ INNER JOIN 가능할듯

 

다시 한번 설명하자면 참가자가 받은 점수가 해당 DIFFICULTY 레벨의 FULL SCORE이라면, DIFFICULTY 테이블에 있는 SCORE 컬럼과 값이 동일해야한다.

 

또한 만점을 받은 챌린지가 2개 이상인 참가자들을 출력하려면~ 위 조건을 만족하는 행들에서 체 COUNT(HACKER_ID)가 1개 이상이어야 할 것.

 

정렬조건은~ ORDER BY (COUNT(CHALLENGE_ID)) DESC, HACKER_ID ASC가 될것이다. 

 

SELECT H.HACKER_ID, H.NAME 
FROM SUBMISSIONS S
    JOIN CHALLENGES C ON S.CHALLENGE_ID = C.CHALLENGE_ID
    JOIN DIFFICULTY D ON C.DIFFICULTY_LEVEL = D.DIFFICULTY_LEVEL
    JOIN HACKERS H ON S.HACKER_ID = H.HACKER_ID
WHERE S.SCORE = D.SCORE
GROUP BY H.HACKER_ID, H.NAME
HAVING COUNT(S.CHALLENGE_ID)>1
ORDER BY COUNT(S.CHALLENGE_ID) DESC, S.HACKER_ID ASC;

'공부 > SQL' 카테고리의 다른 글

[SQL] Hackerrank - Binary Tree Nodes  (0) 2023.04.02
[SQL] Hackerrank - Olivander's Inventory  (0) 2023.03.31
[SQL] HAKERRANK - THE REPORT  (0) 2023.03.31
[SQL] 문제풀이 TYPE OF TRIANGLE  (0) 2023.03.31
SQL - REGEXP  (0) 2023.03.30