홍동이의 성장일기

[HackerRank] SQL Project Planning 본문

Tool/SQL 코딩테스트 풀이

[HackerRank] SQL Project Planning

홍동2 2023. 10. 12. 02:59

 

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

SELECT start_date, end_date
FROM (
        SELECT ROW_NUMBER() OVER (ORDER BY start_date) as num
                , start_date
        FROM projects
        WHERE start_date NOT IN (SELECT end_date FROM projects)
    ) s
INNER JOIN 
    (
        SELECT ROW_NUMBER() OVER (ORDER BY end_date) as num
                , end_date
        FROM projects
        WHERE end_date NOT IN (SELECT start_date FROM projects)
    ) e
ON s.num = e.num
ORDER BY DATEDIFF(end_date, start_date), start_date

 

 

💡 문제풀이

 

예시로 주어진 표에는 4개의 프로젝트가 표현되어 있습니다.

 

SELECT start_date
FROM projects
WHERE start_date NOT IN (SELECT end_date FROM projects)

start_date는 프로젝트의 시작일로, end_date 열에 포함되지 않습니다.

따라서 WHERE절에 조건을 걸어 프로젝트 시작일을 나타내 줍니다.

 

SELECT ROW_NUMBER() OVER (ORDER BY start_date) as num
        , start_date
FROM projects
WHERE start_date NOT IN (SELECT end_date FROM projects)

프로젝트의 번호를 매겨주기 위해서 ROW_NUMBER을 사용해줍니다.

 

 

 

 

 

 

 

 

 

 

SELECT ROW_NUMBER() OVER (ORDER BY end_date) as num
        , end_date
FROM projects
WHERE end_date NOT IN (SELECT start_date FROM projects)

프로젝트의 마지막날도 시작일과 같은 방식으로 뽑아줍니다.

 

 

 

 

 

 

 

 

 

SELECT *
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY start_date) as num
            , start_date
    FROM projects
    WHERE start_date NOT IN (SELECT end_date FROM projects)
) s
INNER JOIN 
(
    SELECT ROW_NUMBER() OVER (ORDER BY end_date) as num
            , end_date
    FROM projects
    WHERE end_date NOT IN (SELECT start_date FROM projects)
) e
ON s.num = e.num

num을 기준으로 두개의 테이블을 JOIN해줍니다.

 

 

 

 

 

 

 

 

 

 

우리에게 필요한 start_date와 end_date만 가져와줍니다.

또한 진행기간이 짧은 프로젝트부터 나타내주어야 하기 때문에 DATEDIFF함수를 사용해 오름차순해줍니다. 프로젝트 기간이 같은 경우 start_date가 빠른 순서대로 나타내줍니다.


📍본 내용은  '[백문이불여일타] 데이터 분석을 위한 고급 SQL 문제풀이'를  수강하며 작성한 내용입니다.

728x90
Comments