SQL/SQL test
[HackerRank] Contest Leaderboard
ISLA!
2024. 1. 16. 22:54
Basic Join / Intermediate
문제
- hacker_id, name, 총 점수를 쿼리
- 총 점수는 challenge_id 별로 가장 높은 값을 합산 한 것(해커별로)
- 총 점수 기준으로 내림차순 후, 동일한 점수라면 hacker_id 기준으로 정렬
- 단, 총 점수가 0인 해커는 제외
풀이
- FROM 절에 서브쿼리 : 먼저 hacker_id, challenge_id 별로 가장 높은 점수를 얻어내고 그 값을 합산해야한다.
- Submission 테이블만 사용하며, hacker_id, challenge_id 기준으로 Groupby
- MAX(score) 값 도출
- 위의 서브쿼리와 Hackers 테이블을 JOIN
- SELECT 절에 도출이 필요한 컬럼 hacker_id, name, SUM(max_score)를 나열
- hacker_id, name 를 기준으로 Groupby
- HAVING 절에 총 점수가 0 이 아닌 값 지정
- ORDER BY로 마무리
SELECT B.hacker_id, name,
SUM(max_score) as totalscore
FROM(
SELECT hacker_id, Challenge_id,
MAX(score) as max_score
FROM Submissions
GROUP BY 1, 2) A
INNER JOIN Hackers as B on A.hacker_id = B.hacker_id
GROUP BY 1, 2
HAVING totalscore != 0
ORDER BY 3 DESC, 1
728x90