율코딩

[MySQL/HackerRank] SQL Project Planning 문제 풀이 본문

SQL/HackerRank

[MySQL/HackerRank] SQL Project Planning 문제 풀이

레아킴 2022. 5. 22. 17:43
반응형
https://www.hackerrank.com/challenges/sql-projects/problem
 

SQL Project Planning | HackerRank

Write a query to output the start and end dates of projects listed by the number of days it took to complete the project in ascending order.

www.hackerrank.com

 

이번 문제는 문제 자체가 어렵다기 보다는 접근 방식이 어려웠다. 나는 결국 풀지 못하고 Discussion을 보고 이해하였는데, 굉장히 단순하면서도 색다르게 느껴졌다.

 

  • Start_Date 중 End_Date에는 없는 Start_Date는 각 연속적이지 않으므로, 처음 시작하는 프로젝트의 시작 날자를 의미한다.
  • End_Date 중 Start_Date에는 없는 End_Date는 각 연속적이지 않으므로, 프로젝트의 종료날짜를 의미한다.

 

 

정답쿼리

select start_date, MIN(end_date)
from (select start_date 
      from projects 
      where start_date NOT IN (select end_date from projects)
     ) a, #end_date에 존재하지 않는 시작날짜
     (select end_date
      from projects
      where end_date NOT IN (select start_date from projects)
     ) b #start_date에 존재하지 않는 종료날짜
where start_date < end_date
group by start_date
order by DATEDIFF(MIN(end_date),start_date), start_date

 

서브쿼리로 합친 a,b 테이블에서 서로 join한 것으로 나오는데 start_date 보다 end_date가 더 뒤에 있는 데이터들만 가져온다.

또한, group by 로 start_date를 묶고 가장 작은 end_date값만 가져온다. (중복 데이터를 제거하기 위해)

그리고 문제에 요구사항대로 종료날짜와 시작날짜의 차이가 작은것순으로 정렬한다.

 

 

새로운 접근법으로 풀어야하는 문제에는 아직 미숙하다... 꾸준히 풀어보고 익히는 수밖에...!  화이팅하자.

반응형
Comments