본문 바로가기
Be Smart/SQL

[Oracle] HackerRank 문제 정리 - 3

by 반월하 2022. 8. 2.
728x90

Contest Leaderboard

테이블:

Hackers

Submissions

조건:

작업 의 End_Date 가 연속적이면 동일한 프로젝트의 일부입니다. 
Samantha는 완료된 서로 다른 프로젝트의 총 수를 찾는 데 관심이 있습니다.

프로젝트를 완료하는 데 걸린 일 수로 나열된 프로젝트의 시작 날짜와 종료 날짜를 오름차순으로 출력하는 쿼리를 작성하십시오. 
완료 일수가 동일한 프로젝트가 두 개 이상 있는 경우 프로젝트 시작 날짜를 기준으로 주문하십시오.

select min(start_date), max(end_date)
from
  (select 
  start_date
  ,end_date
  ,start_date-row_number()over(order by start_date) as rnk
  from
  Projects p) tmp
group by rnk
order by max(start_date) - min(start_date), min(start_date);

쿼리 해석

먼저 서브쿼리로 시작 날짜, 끝나는 날짜, 시작날짜  - (각 행의 숫자)
여기서 시작날짜 - (각 행의 숫자)는 rnk라 여겨지며 이 것은 연속된 일 수는 동일한 프로젝트로 여겨지기 때문에
이 값이 동일할 경우에는 하나의 프로젝트라 할 수 있다.

이 것을 서브쿼리로 하여 rnk는 하나의 프로젝트이므로 그룹바이로 묶어준다.

묶어준 것에서 최소 시작일과 최대 끝나는 날은 한 프로젝트의 시작과 끝을 의미하고

그 다음 총 프로젝트 일수가 적은 것 과 시작일이 빠른 순으로 순서를 지정하여 출력해준다.

 

728x90

댓글