📌 문제 목표
- 목표: 각 해커의 총점을 구하기
- 총점: 각 문제마다 그 해커가 제출한 점수 중 최고 점수만 반영
그리고 그 최고 점수들을 모든 문제에 대해 합산한다.
- 조건:
1. 총점이 0인 해커는 제외
2. 정렬 순서: TOTAL_SCORE DESC, hacker_id ASC
📌 문제 해결 접근 과정
1. 해커별, 문제별 최고 점수목록 구하기
SELECT
hacker_id,
challenge_id,
MAX(score) AS MAX_SCORE
FROM Submissions
GROUP BY hacker_id, challenge_id
2. 총점이 0 점 제외
SELECT
H.hacker_id,
H.name,
SUM(TOTAL.MAX_SCORE) AS TOTAL_SCORE
FROM
Hackers AS H
JOIN
(
--위 쿼리
) AS TOTAL
ON H.hacker_id = TOTAL.hacker_id
GROUP BY
TOTAL.hacker_id,H.name
HAVING
SUM(TOTAL.MAX_SCORE) > 0
ORDER BY
TOTAL_SCORE DESC, hacker_id ASC;
3. 최종 제출 쿼리
SELECT
H.hacker_id,
H.name,
SUM(TOTAL.MAX_SCORE) AS TOTAL_SCORE
FROM
Hackers AS H
JOIN
(
SELECT
hacker_id,
challenge_id,
MAX(score) AS MAX_SCORE
FROM Submissions
GROUP BY hacker_id, challenge_id
) AS TOTAL
ON H.hacker_id = TOTAL.hacker_id
GROUP BY
TOTAL.hacker_id,H.name
HAVING
SUM(TOTAL.MAX_SCORE) > 0
ORDER BY
TOTAL_SCORE DESC, hacker_id ASC;