문제 출처
https://www.hackerrank.com/challenges/contest-leaderboard/problem?isFullScreen=true
문제 설명
Hackers table, Submission Table이 주어진다.
제출 데이터에서 유저별로 얻은 최종 득점(과제별 최고점의 합)을 계산 후,
Hacker table과 결합하여 해커id, 해커 이름, 최종 점수를 고득점자 순서대로 나열한다. (동률일 경우 해커 이름 사전순)
이 때, 합산 점수가 0점인 해커는 제외된다.
풀이
과제별로 Max를 얻는 부분부터 나눠야 한다. 해당 테이블을 얻어서 join 시킬 생각을 해야 한다.
즉 작은 서브쿼리부터 만들어 해결하면 쉽다.
SELECT a.hacker_id, a.name, b.total_score
FROM hackers as a
LEFT JOIN
(SELECT hacker_id, SUM(max_score) AS total_score
FROM (
SELECT hacker_id, challenge_id, MAX(score) as max_score
FROM submissions
GROUP BY hacker_id, challenge_id
) subq
GROUP BY hacker_id
) as b
ON a.hacker_id = b.hacker_id
WHERE b.total_score > 0
ORDER BY b.total_score DESC, hacker_id ASC
'SQL' 카테고리의 다른 글
[SQL] 프로그래머스 입양시각 구하기 (2) (0) | 2021.09.21 |
---|---|
[SQL] LeetCode - 181. Employees Earning More than their Manager (0) | 2021.09.02 |
[DB] 트랜잭션이란? (0) | 2021.08.24 |
[DB] 인덱스 간단히 개념잡기 (0) | 2021.08.23 |
[DB] Key 정리 (0) | 2021.08.18 |