[SQL문제]HackerRank - Contest Leaderboard

Godtaek·2024년 4월 13일
0

SQL

목록 보기
2/2

1. 문제

https://www.hackerrank.com/challenges/contest-leaderboard/problem?isFullScreen=true

  1. 해커 테이블과 제출 테이블이 주어진다.
  2. 해커가 챌린지 중 얻은 가장 높은 점수들의 합을 hacker_id, name과 함께 출력해라
  3. 점수 합이 0점이면 제외
  4. total_score desc 순으로 정렬하고, 동점이라면, hacker_id asc 순
  • hackers 테이블
  • Submissions 테이블

2. 풀이

select s.hacker_id,h.name, sum(s.max_score) as total_score
from (select hacker_id, max(score) as max_score from submissions group by challenge_id, hacker_id) as s
join hackers h on s.hacker_id = h.hacker_id
group by s.hacker_id, h.name
having sum(s.max_score) > 0
order by total_score desc, s.hacker_id
  1. select문을 통해, 출력할 컬럼을 지정한다.(hacker_id, name, sum(max_score))

  2. 쿼리를 통해 max(score)를 반환하도록 한다. 이 때, 챌린지당 가장 높은 점수를 반환해야 하기 때문에, group by로 challenge_id와 hacker_id를 묶는다.

  3. hackers 테이블과 join한다. 외래키는 hacker_id

  4. hacker_id와 name을 기준으로 묶고, max_score가 0 이상인지 확인한다.

profile
성장하는 개발자가 되겠습니다

0개의 댓글