728x90
📚문제
https://www.hackerrank.com/challenges/sql-projects/problem?isFullScreen=true
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
, MIN(End_Date)
FROM ((SELECT Start_Date
FROM Projects
WHERE Start_Date NOT IN (SELECT End_Date FROM Projects)) A,
(SELECT End_Date
FROM Projects
WHERE End_Date NOT IN (SELECT Start_Date FROM Projects)) B)
WHERE Start_Date < End_Date
GROUP BY Start_Date
ORDER BY DATEDIFF(MIN(End_Date),Start_Date), Start_Date
풀이는 구글링하여 참고
End_Date에 들어가있지 않은 Start_Date를 고른다는것이 참신한 아이디어같다
Start_Date가 End_Date에 들어가있지 않다면
연속된 프로젝트가 아닌
새 프로젝트의 시작날짜라는 이야기이다
End_Date도 마찬가지
이렇게 나온 두 테이블을
카티션곱(Cross JOIN)한 다음에
프로젝트의 종료 시점이 시작 시점보다 늦는 경우만 가져오기
그 다음 시작 시점으로 그룹화하여
가장 작은 종료 시점을 가져오기
(이 종료시점이 프로젝트의 시작부터 종료까지 연속된 기간을 의미)
그리고 주의할 점은
ORDER BY할 때
그룹화 해준 열 / 집계된 열
만을 사용해주어야 한다
그렇지않으면 다음과 같은 에러 발생
728x90
'SQL > HackerRank (SQL문풀)' 카테고리의 다른 글
** HackerRank / Advanced Join / Interviews / MySQL ** (0) | 2024.01.20 |
---|---|
HackerRank / Alternative Queries / Print Prime Numbers / MySQL (0) | 2024.01.18 |
Hackerrank / Basic Join / Ollivander's Inventory / MySQL (0) | 2024.01.10 |
Hackerrank / Basic Join / Top Competitors / MySQL (0) | 2024.01.09 |
**Hackerrank / Aggregation / Weather Observation Station 20 / MySQL ** (0) | 2024.01.08 |