해커랭크 [Challenges]

윤태영·2024년 8월 27일
0

문제

https://www.hackerrank.com/challenges/challenges/problem?isFullScreen=true

줄리아는 학생들에게 코딩문제(challenges)를 만들어달라고 요청했다. 이 때 각 학생의 hacker_id, name, 문제를 만든 총개수를 출력하라. 이 때 정렬은 총 문제 개수의 내림차순으로 한다. 만약 똑같은 문제 개수를 만든 학생이 2명 이상이라면, 그 때는 hacker_id를 기준으로 오름차순으로 정렬시켜라. 또한 만약 2명 이상이 똑같은 문제 개수를 만들었을때, 그 문제 개수가 문제 개수의 최댓값보다 작다면 그 때의 학생들은 출력시키지 않아야 한다.

INPUT FORMAT

TABLE NAME : Hackers

TABLE NAME : Challenges

SAMPLE INPUT

Sample Output

문제풀이

  • 학생별로 챌린지수 구하기
  • 학생들이 챌리지 한수의 최대치(MAX)값은 동일값이 나와도 포함된다.
  • 하지만 학생들이 챌리지한수가 최대치 외에 동일값이 나오면 제외한다.

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


profile
ice blue

0개의 댓글