문제 https://www.hackerrank.com/challenges/contest-leaderboard/problem
쿼리
SELECT h.hacker_id, h.name, SUM(score_max) total_score FROM ( SELECT hacker_id, MAX(score) score_max # 2 FROM Submissions GROUP BY hacker_id, challenge_id # 1 ) t JOIN Hackers h ON h.hacker_id = t.hacker_id # 3 GROUP BY h.hacker_id, h.name # 4 HAVING total_score !=0 ORDER BY total_score DESC, h.hacker_id |
설명
- FROM 에 있는 서브쿼리를 먼저 설명함.
- #1 : 해커 당 challenge_id 의 최대 score 를 계산하기 위해,
group by 를 이용하여 hacker_id, challenge_id 로 계산.
- #2 : select 문으로 필요한 hacker_id 와 max(score) 를 추출한다.
- #3 : hacker 의 이름을 쿼리할 수 있도록, hacker_id 를 기준으로 join.
그럼 hacker_id 에 따른 이름을 쿼리할 수 있음.
- #4 : hacker_id와 name을 기준으로 group by 함.
왜냐면 select 할 때 hacker_id 와 name 을 출력해야하니까.
- 나머지 조건들을 충족시킨 이후에 원하는 정보를 쿼리하면 됨.
- group by 를 어떻게 잘 쓰느냐가 중요한 문제였음
'SQL' 카테고리의 다른 글
[MySQL] 테이블 의존성 확인하는 방법 (0) | 2021.11.17 |
---|---|
[MySQL] 바깥에서 쿼리 전달하는 법 (0) | 2021.11.17 |
[SQL] Hacker Rank Top Competitors 쿼리 설명 (0) | 2021.07.01 |
[SQL] Hacker Rank Placements 쿼리 설명 (0) | 2021.07.01 |
[SQL] Hacker Rank Binary Tree Nodes 쿼리 설명 (0) | 2021.07.01 |