코딩일기

[HackerRank] SQL 코딩테스트 준비 3day(feat. tips 및 복습) 본문

Code/SQL

[HackerRank] SQL 코딩테스트 준비 3day(feat. tips 및 복습)

daje 2021. 10. 20. 17:30
728x90
반응형

 

 

 

 

 

안녕하십니까 다제입니다. 

 

오늘은 SQL 복습 3일차 입니다. 오늘도 HackerRank에서 문제를 풀어보았는데요 

 

함께 살펴보도록 하시죠! 

 

 

 

5. Weather Observation Station 20
 - 문제의 해석 : 간단히 중간값을 구하라 문제입니다.   
 - 선정한 이유 : NySQL에서는 아직 median함수가 없습니다. 이제 median 형식을 이용하여 접근을 해야하기에 문제를 선정하였습니다. 
 - 접근방식 : percent_rnak()를 활용하여 풀었습니다. 
 - 링크 : https://www.hackerrank.com/challenges/weather-observation-station-20/problem
 - 코드 

SELECT ROUND(LAT_N,4)
FROM(SELECT LAT_N, PERCENT_RANK() OVER (ORDER BY LAT_N) percent
     FROM STATION) a
WHERE percent = 0.5;



6. Top Competitors
 - 문제의 해석 : 코딩테스트 제출자 중 full score 맞은 문제가 한개보다 많은 (2개 이상) 인 참가자의 hacker_id와, name을 출력하라는문제입니다.
                여기서 full score가 무엇이지? 고민할 수 있는데, 각 문제별도 주어진 점수표가 full score가 됩니다. 
 - 선정한 이유 : join에 대한 훈련을 할 수 있기때문입니다. 
 - 접근방식 : 
  1) submissions table을 base로 필요한 정보를 담고 있는 테이블들을 join합니다.    
  2) 제출한 문제의 full score 를 알기 위해 difficuly 테이블의 score 정보가 필요합니다. 
  3) difficulty level 정보가 있어야 full score 를 연결할 수 있고, 그 정보는 Challenges 테이블에 있습니다. 
  4) hacker의 이름을 출력하기 위해 Hackers 테이블이 필요합니다. 
 - 링크 : https://www.hackerrank.com/challenges/full-score/problem
 - 코드 

select h.hacker_id, h.name
from submissions s
inner join challenges c
on s.challenge_id = c.challenge_id
inner join difficulty d
on c.difficulty_level = d.difficulty_level 
inner join hackers h
on s.hacker_id = h.hacker_id
where s.score = d.score and c.difficulty_level = d.difficulty_level
group by h.hacker_id, h.name
having count(s.hacker_id) > 1
order by count(s.hacker_id) desc, s.hacker_id asc

 

오늘도 두 문제를 함께 풀어보았는데도 오늘은 연습이 조금 필요한 거 같네요.. 생각이 잘 나지 않아서 고생했습니다. ㅠㅠ

 

진짜 풀기 싫었는데 꾹 참고 성실히 풀었습니다. 

 

여러분과도 함께 약속한것이니까요! 

 

오늘도 글을 읽어주셔서 감사합니다. 

728x90
반응형
Comments