반응형
www.hackerrank.com/challenges/full-score/problem
Top Competitors | HackerRank
Query a list of top-scoring hackers.
www.hackerrank.com
해결 방법 : 다중 JOIN
- 그냥 다중 JOIN으로 구현한 쿼리가 제일 빠를 것 같다.
SELECT s.hacker_id, max(h.name)
FROM submissions as s
JOIN challenges as c on s.challenge_id = c.challenge_id
JOIN difficulty as d on c.difficulty_level = d.difficulty_level
JOIN hackers as h on s.hacker_id = h.hacker_id
WHERE s.score = d.score
GROUP BY s.hacker_id
HAVING count(s.challenge_id) > 1
ORDER BY count(s.challenge_id) desc, s.hacker_id;
처음에는 submission table의 score가 만점인지 판별하는 것이 메인 문제라는 생각에
아래와 같은 방법으로 구현하려다가, WHERE절 서브쿼리는 피할수 있으면 피하라는 글을 본 것 같아서,,
위 방법으로 풀고 WHERE절 서브쿼리에 대해 좀 더 찾아봤다.
→ 찾아보니 MySQL 5.6 버전 부터는 '몇 가지 조건'을 만족하는 서브쿼리는 자동적으로 최적화 되어 JOIN table이 생성된다고 한다, 그래도 JOIN으로 해결할 수 있는 경우는 JOIN을 쓰는게 좋다.
(출처 : jojoldu.tistory.com/520 글이 너무 알차서 저장하려고 보니 요즘 재밌게 보고 있는 유투브 채널 '개발바닥'에 나오는 배민 리드개발자 출신 이동욱님 블로그다..!)
SELECT s.hacker_id, max(h.name)
FROM submissions as s JOIN hackers as h on s.hacker_id = h.hacker_id
WHERE s.score
= (
SELECT d.score
FROM difficulty as d, challenges as c
WHERE d.difficulty_level = c.difficulty_level and
s.challenge_id = c.challenge_id
)
GROUP BY s.hacker_id
HAVING count(s.challenge_id) > 1
ORDER BY count(s.challenge_id) desc, s.hacker_id;
반응형
'IT study > SQL' 카테고리의 다른 글
Challenges (0) | 2021.05.02 |
---|---|
Ollivander's Inventory (0) | 2021.05.01 |
The Report (IF) (0) | 2021.04.26 |
Weather Observation Station 20 (0) | 2021.04.25 |
Weather Observation Station 18 ~ 19 (0) | 2021.04.23 |