출처
문제
The total score of a hacker is the sum of their maximum scores for all of the challenges. Write a query to print the hacker_id, name, and total score of the hackers ordered by the descending score. If more than one hacker achieved the same total score, then sort the result by ascending hacker_id. Exclude all hackers with a total score of from your result.
문제에 대한 해석
- 조회 : hacker_id, name, and total score of the hackers
- * total score of a hacker is the sum of their maximum scores for all of the challenges
- (같은 챌린지인 경우 점수가 큰것을 선택해서 도전한 챌린지별 점수 총합)
- 정렬 : score 내림차순, hacker_id 오름차순
- 조건 :Exclude all hackers with a total score of 0 (모든 챌린지 점수를 합했을 때 0인 해커는 제외)
풀이(MYSQL)
select
hacker_id,
name,
sum(max_score) as score
from
(select
h.hacker_id,
h.name,
s.challenge_id,
max(s.score) as max_score
from Hackers h join Submissions s
on h.hacker_id = s.hacker_id
group by h.hacker_id, h.name, s.challenge_id) a
group by hacker_id, name
having sum(max_score) > 0
order by score desc, hacker_id
작동순서
💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환
- FROM 절:
- 서브쿼리 : Hackers와 Submissions테이블을 hacker_id로 조인하여
- group by절 : h.hacker_id, h.name, s.challenge_id로 그룹화하여
- select절 : h.hacker_id, h.name, s.challenge_id와 s.score의 최대값(=max_score)을 조회하라(동일한 해커가 동일한 챌린지를 여러가 도전했다면 해당 챌린지의 최대 점수만 조회)
- GROUP BY 절: hacker_id, name별로 그룹화하여
- HAVING 절: max_score을 합산하는데, 0보다 클 경우만 필터링
- SELECT 절: hacker_id, name, max_score의 총합을 조회하라
- ORDER BY 절: score 내림차순, hacker_id오름차순
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] Hacker Rank - Challenges (1) | 2024.06.18 |
---|---|
[문제풀이] Hacker Rank - SQL Project Planning (0) | 2024.06.14 |
[문제풀이] Hacker Rank - Ollivander's Inventory (0) | 2024.06.12 |
[문제풀이] Programmers - 업그레이드 된 아이템 구하기 (1) | 2024.06.11 |
[문제풀이] Hacker Rank - Top Competitors (0) | 2024.06.11 |