[HackerRank] Challenges(복잡한 서브쿼리)

생각하는 마리오네트·2021년 9월 28일
0

SQL

목록 보기
18/39

문제 설명

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.

Input Format

  • Hackers : The hacker_id is the id of the hacker, and name is the name of the hacker.
ColumnType
hacker_idInteger
nameString
  • Challenges : The challenge_id is the id of the challenge, and hacker_id is the id of the student who created the challenge.
ColumnType
challenge_idInteger
hacker_itInteger

이번 문제는 설명으로봐서 절대 이해가 안되서 예시 input, output 을 꼭 봐야한다.

어려운 부분

  • 먼저 문제를 이해하는것 부터 어려웠다... 문제만 봐도 서브쿼리를 이리저리 활용해야함을 인지했으며, 감이 안왔다.
  • 그래서 하나하나 문제를 작게 잘라서 접근하려고 했지만, 진행이 잘 되지 않았다. 작게 자른 한단계만 진행이 되었고 해당부분은 다음과 같다.
SELECT H.hacker_id, H.name, COUNT(C.challenge_id) AS challenges_created
FROM Hackers H
INNER JOIN Challenges C on H.hacker_id = C.hacker_id
GROUP BY C.hacker_id, H.name
  • 이 다음 어떻게 해서 내림차순을 만들어주고 겹치는 부분을 포함시키지 않을지 한참을 고민했지만 풀리지 않았고 원인을 알게 되었다. 이유는 서브쿼리에 대한 이해도 부족이었다.
  • 현재 구글링을 통해 이해를 했고 문제를 완료했다. 하지만 서브쿼리에 부족함을 채우기 위해서 서브쿼리에대해 좀 더 자세히 공부하고 이전에 풀었던 문제들을 복습한 후 더 높은 난이도를 도전하려고 한다.

정답

SELECT H.hacker_id, H.name, COUNT(C.challenge_id) AS challenges_created
FROM Hackers H
INNER JOIN Challenges C on H.hacker_id = C.hacker_id
GROUP BY C.hacker_id, H.name
Having 
# 최대값
    challenges_created = (SELECT COUNT(C1.challenge_id) FROM Challenges AS C1 
    GROUP BY C1.hacker_id ORDER BY COUNT(*) DESC LIMIT 1) OR
# 최대값이 아닌것 중, 중복되지 않은것들    
    challenges_created NOT IN (SELECT COUNT(C2.challenge_id)FROM Challenges AS C2 
    GROUP BY C2.hacker_id HAVING C2.hacker_id != C.hacker_id)

ORDER BY challenges_created Desc, C.hacker_id;
profile
문제를해결하는도구로서의"데이터"

0개의 댓글