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
'SQL > SQL test' 카테고리의 다른 글
[HackerRank] Occupations (Pivot) (0) | 2024.01.17 |
---|---|
[HackerRank] SQL Project Planning (0) | 2024.01.17 |
[HackerRank] Challenges (0) | 2024.01.16 |
[HackerRank] The Report (INNER JOIN - BETWEEN) (0) | 2024.01.15 |
[HackerRank] Weather Observation Station 5(UNION) (1) | 2024.01.15 |