2개 이상의 challenge에서 만점을 받은 해커의 hacker_id와 name을 출력하는 문제이다.
만점 challenge 개수를 기준으로 내림차순 정렬하고, 동률일 경우 hacker_id를 기준으로 오름차순 정렬해야 한다.
JOIN 연산을 통해 SUBMISSIONS를 기준으로 CHALLENGES, DIFFICULTY, HACKERS 테이블을 연결했다.
그리고 S.SCORE = D.SCORE 조건으로 만점인 제출(SUBMISSION_ID)만 남기고, 그룹화로 만점을 2개 이상 받은 해커만 남겼다.
마지막으로 만점 개수 기준 내림차순, HACKER_ID 기준 오름차순으로 정렬하여 HACKER_ID와 NAME이 출력되도록 했다.
SELECT
S.HACKER_ID,
H.NAME
FROM
SUBMISSIONS AS S
JOIN HACKERS AS H ON S.HACKER_ID = H.HACKER_ID
JOIN CHALLENGES AS C ON S.CHALLENGE_ID = C.CHALLENGE_ID
JOIN DIFFICULTY AS D ON C.DIFFICULTY_LEVEL = D.DIFFICULTY_LEVEL
WHERE
S.SCORE = D.SCORE
GROUP BY
S.HACKER_ID,
H.NAME
HAVING
COUNT(S.SUBMISSION_ID) >= 2
ORDER BY
COUNT(S.SUBMISSION_ID) DESC,
S.HACKER_ID ASC;