https://www.hackerrank.com/challenges/full-score/problem
줄리아는 코딩대회를 마쳤고 참가자들의 점수 리더보드를 만드려고 한다. 2개 이상의 Challenge(문제)에서 Full score(만점)를 받은 Hacker(참가자)들의 이름과 hacker_id를 출력해라. 이 때 결과 화면을 Full score를 받은 Challenge의 개수를 기준으로 내림차순 정렬하고 만약 Fulls score를 맏은 Challenge 개수가 동일하다면 hacker_id를 기준으로 오름차순 정렬 해라.
TABLE NAME : Hackers
TABLE NAME : Difficulty
TABLE NAME : Challenges
TABLE NAME : Submissions
요약 : 둘 이상의 도전에서 만점을 받은 해커의 id,이름 출력
만점을 받은 도전 횟수 내림차순 정렬하며 동일할 경우 해커 아이디 오름차순 정렬
1) Full score(만점)을 맏은 챌린지가 2개 이상인 참가자들을 찾자.
2) 만점이란, Submissions 테이블의 score 값과 Difficulty 테이블의 score값이 일치하는 것을 의미
3) 2가지 정렬 기준을 만족해서 출력
문제의 만점기준 점수와 참가자가 풀고 난 점수가 동일 하면서 문제의 난이도가 동일해야 하기 때문에 WHERE 구문절을 통해 Full score를 맞은 참가자들만 필터링
HACKER_ID와 NAME을 기준으로 그룹핑시켜 Full score를 맞은 문제가 2개이상인 사람을 알아보자.
SELECT D.HACKER_ID, D.NAME
FROM SUBMISSIONS A
INNER JOIN CHALLENGES B ON A.CHALLENGE_ID = B.CHALLENGE_ID
INNER JOIN DIFFICULTY C ON B.DIFFICULTY_LEVEL = C.DIFFICULTY_LEVEL
INNER JOIN HACKERS D ON A.HACKER_ID = D.HACKER_ID
WHERE C.DIFFICULTY_LEVEL = B.DIFFICULTY_LEVEL AND C.SCORE = A.SCORE
GROUP BY D.HACKER_ID, D.NAME
HAVING COUNT(*) > 1
ORDER BY COUNT(D.HACKER_ID) DESC, D.HACKER_ID