https://www.hackerrank.com/challenges/challenges/problem?isFullScreen=true
줄리아는 학생들에게 코딩문제(challenges)를 만들어달라고 요청했다. 이 때 각 학생의 hacker_id, name, 문제를 만든 총개수를 출력하라. 이 때 정렬은 총 문제 개수의 내림차순으로 한다. 만약 똑같은 문제 개수를 만든 학생이 2명 이상이라면, 그 때는 hacker_id를 기준으로 오름차순으로 정렬시켜라. 또한 만약 2명 이상이 똑같은 문제 개수를 만들었을때, 그 문제 개수가 문제 개수의 최댓값보다 작다면 그 때의 학생들은 출력시키지 않아야 한다.
TABLE NAME : Hackers
TABLE NAME : Challenges
1) WITH구문을 사용하여 해커아이디, 네임별로 챌린지 아이디를 COUNT하는 테이블을 생성
2) CTE로 만든 테이블을 활용하여 (1)챌린지 아이디를 그룹으로 묶어 카운트한 값이 1인 챌린지 아이디 (2) 챌린지 아이디를 카운트한 맥스 조건식을 작성한다.
3) 최종적으로 합친다.
WITH CTE AS(
SELECT A.HACKER_ID, A.NAME, COUNT(B.CHALLENGE_ID) AS CNT
FROM HACKERS A
INNER JOIN CHALLENGES B ON A.HACKER_ID = B.HACKER_ID
GROUP BY A.HACKER_ID, A.NAME
)
SELECT *
FROM CTE
WHERE CNT IN (
SELECT MAX(CNT)
FROM CTE
) OR CNT IN(
SELECT CNT
FROM CTE
GROUP BY CNT
HAVING COUNT(CNT) = 1
)
ORDER BY CNT DESC, HACKER_ID