문제
Julia asked her students to create some coding challenges. Write a query to print the hacker_id, name, and the total number of challenges created by each student. Sort your results by the total number of challenges in descending order. If more than one student created the same number of challenges, then sort the result by hacker_id. If more than one student created the same number of challenges and the count is less than the maximum number of challenges created, then exclude those students from the result.
줄리아는 학생들에게 코딩 도전과제를 만들도록 요청했습니다. 각 학생이 만든 hacker_id, name, 그리고 도전과제의 총 개수를 출력하는 쿼리를 작성하세요. 결과는 도전과제의 총 개수를 기준으로 내림차순으로 정렬하세요. 만약 두 명 이상의 학생이 같은 수의 도전과제를 만들었다면, hacker_id를 기준으로 정렬하세요. 만약 두 명 이상의 학생이 같은 수의 도전과제를 만들었고, 그 개수가 가장 많이 만든 도전과제의 수보다 적다면, 해당 학생들은 결과에서 제외하세요.
WITH TEMP AS(
SELECT H.hacker_id, H.name, COUNT(*) AS cnt
FROM Hackers AS H
JOIN Challenges AS C ON C.hacker_id = H.hacker_id
GROUP BY H.hacker_id, H.name
),
TEMP2 AS(
SELECT cnt, COUNT(*) cnt_of_cnt
FROM TEMP
GROUP BY cnt
ORDER BY cnt DESC
)
SELECT T.hacker_id, T.name, T.cnt
FROM TEMP T
JOIN TEMP2 T2 ON T.cnt = T2.cnt
WHERE T2.cnt_of_cnt = 1 OR T2.cnt = (SELECT MAX(cnt) FROM TEMP2)
ORDER BY T.cnt DESC, T.hacker_id
확실히 MEDIUM 가니 문제가 확 어려워진다. TEMP 까지는 어찌어찌 짰지만 나머지는 클로드 도움을 받았다. 확실히 Hacker_Rank가 프로그래머스보다 어렵게 느껴진다.
<2025년 5월 3일 복습>
WITH TEMP AS(
SELECT H.hacker_id, H.name, COUNT(*) AS cnt
FROM Hackers H
JOIN Challenges C ON H.hacker_id = C.hacker_id
GROUP BY H.hacker_id, H.name
),
freq AS (
SELECT cnt, COUNT(cnt) AS cnt_of_cnt
FROM TEMP
GROUP BY cnt
),
max_cnt AS (
SELECT MAX(cnt) AS max_cnt
FROM TEMP
)
SELECT T.hacker_id, T.name, T.cnt
FROM TEMP T
JOIN freq F ON T.cnt = F.cnt
JOIN max_cnt MC ON 1=1
WHERE cnt_of_cnt = 1 OR T.cnt = MC.max_cnt
ORDER BY T.cnt DESC, hacker_id ASC;
'MYSQL > HakerRank_Medium' 카테고리의 다른 글
SQL Project Planning과 Islands and Gaps 패턴 (0) | 2025.04.21 |
---|---|
Contest Leaderboard (0) | 2025.04.21 |
Ollivander's Inventory와 서브쿼리 (0) | 2025.04.18 |
Top Competitors (0) | 2025.04.17 |
The Report : JOIN을 이렇게도 쓸 수 있구나! (0) | 2025.04.17 |