KEEP GOING
[MySQL] HackerRank : Challenges Solution 본문
반응형
https://www.hackerrank.com/challenges/challenges/problem?isFullScreen=true
1. 에러난 코드
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
WHERE MAX(challenges_created) OR COUNT(challenges_created) = 1 #문제1
GROUP BY H.hacker_id, H.name
ORDER BY COUNT(C.challenge_id) DESC, H.hacker_id
이러한 아이디어를 가지고 접근하였으나 3번째 줄에서 에러가 발생하였다. 그래서 이부분을 해결하기 위해 서브쿼리를 이용해보았다.
SELECT H.hacker_id, H.name, COUNT(C.challenge_id) # (1)
FROM Hackers H INNER JOIN Challenges C ON H.hacker_id = C.hacker_id
GROUP BY H.hacker_id, H.name
HAVING COUNT(C.challenge_id) = (SELECT MAX(tmp1.challenges_created)
FROM (SELECT COUNT(challenge_id) challenges_created
FROM Challenges GROUP BY hacker_id) tmp1)
# 문제1 중복이 아닌 카운트 수 조회시 오류 발생
OR COUNT(C.challenge_id) IN
(SELECT tmp2.challenges_created
FROM (SELECT COUNT(challenge_id) challenges_created
FROM Challenges
GROUP BY hacker_id) tmp2
GROUP BY tmp2.challenges_created
HAVING COUNT(tmp2.challenges_created) = 1)
ORDER BY COUNT(C.challenge_id) DESC, C.hacker_id
[# 문제1] 카운트 수가 MAX 값이 아니면서 중복인 튜플들을 제거하는 부분이 결과 출력시 나타나지 않았다. (1) 부분에서 alias를 명시하여 서브쿼리 절에 접근해주니 문제가 해결되었다. COUNT() 함수가 자주 반복되다 보니 내부적으로 구분이 안된듯 싶다.
2. 정답인 코드
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 MAX(tmp1.cnt)
FROM (SELECT COUNT(challenge_id) cnt
FROM Challenges
GROUP BY hacker_id) tmp1)
OR challenges_created NOT IN
# 문제 개수 중 중복으로 카운팅되는 값을 조회
(SELECT tmp2.cnt
FROM (SELECT COUNT(challenge_id) cnt
FROM Challenges
GROUP BY hacker_id) tmp2
GROUP BY tmp2.cnt
HAVING COUNT(tmp2.cnt) >= 2)
ORDER BY challenges_created DESC, C.hacker_id
반응형
'code review > sql' 카테고리의 다른 글
[MySQL] LeetCode 196번 : Delete Duplicate Emails (0) | 2022.01.24 |
---|---|
[MySQL] HackerRank : Occupations Solution (0) | 2021.12.23 |
[MySQL] HackerRank : The Report Solution (0) | 2021.12.22 |
[MySQL] HackerRank : Binary Tree Nodes Solution (0) | 2021.12.21 |
[MySQL] HackerRank : Placements Solution (0) | 2021.12.21 |
Comments