문제 설명
다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블은 아래와 같은 구조로 되어있으며, HISTORY_ID, CAR_ID, START_DATE, END_DATE 는 각각 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일을 나타냅니다.
COLUMN NAME | TYPE | NULLABLE |
HISTORY_ID | INTEGER | FALSE |
CAR_ID | INTEGER | FALSE |
START_DATE | DATE | FALSE |
END_DATE | DATE | FALSE |
문제
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
예시
예를 들어 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블이 다음과 같다면
HISTORY_ID | CAR_ID | START_DATE | END_DATE |
1 | 4 | 2022-09-27 | 2022-11-27 |
2 | 3 | 2022-10-03 | 2022-11-04 |
3 | 2 | 2022-09-05 | 2022-09-05 |
4 | 1 | 2022-09-01 | 2022-09-30 |
5 | 3 | 2022-09-16 | 2022-10-15 |
2022년 9월의 대여 기록 중 '장기 대여' 에 해당하는 기록은 대여 기록 ID가 1, 4인 기록이고, '단기 대여' 에 해당하는 기록은 대여 기록 ID가 3, 5 인 기록이므로 대여 기록 ID를 기준으로 내림차순 정렬하면 다음과 같이 나와야 합니다.
HISTORY_ID | CAR_ID | START_DATE | END_DATE |
5 | 3 | 2022-10-13 | 단기 대여 |
4 | 1 | 2022-09-30 | 장기 대여 |
3 | 2 | 2022-09-05 | 단기 대여 |
1 | 4 | 2022-10-26 | 장기 대여 |
주의사항
START_DATE와 END_DATE의 경우 예시의 데이트 포맷과 동일해야 정답처리 됩니다.
풀이
1. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서
2. 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서
3. 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요.
4. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
SELECT HISTORY_ID --자동차 대여 기록 ID
, CAR_ID --자동차 ID
, TO_CHAR(START_DATE, 'YYYY-MM-DD') AS START_DATE --대여 시작일
, TO_CHAR(END_DATE, 'YYYY-MM-DD') AS END_DATE --대여 종료일
, CASE WHEN (END_DATE - START_DATE +1) >= 30 THEN '장기 대여'
ELSE '단기 대여'
END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE TO_CHAR(START_DATE,'YYYYMMDD') LIKE '202209%'
ORDER BY HISTORY_ID DESC
코드풀이
SELECT HISTORY_ID --자동차 대여 기록 ID
, CAR_ID --자동차 ID
, TO_CHAR(START_DATE, 'YYYY-MM-DD') AS START_DATE --대여 시작일
, TO_CHAR(END_DATE, 'YYYY-MM-DD') AS END_DATE --대여 종료일
, CASE WHEN (END_DATE - START_DATE +1) >= 30 THEN '장기 대여'
ELSE '단기 대여'
END AS RENT_TYPE --대여기간 30일 기준에 따른 대여기록 추가 컬럼
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE TO_CHAR(START_DATE,'YYYYMM') = '202209'
/* TO_CHAR(START_DATE,'YYYYMMDD') LIKE '202209%' 방식으로도 사용 가능
대여 시작일이 2022년 9월에 속하는 대여 기록
대여시작일을 조건절로 걸기 위해 START_DATE컬럼(DATE타입)을 -> 문자열 형태로 변경 */
ORDER BY HISTORY_ID DESC --기록 ID를 기준으로 내림차순 정렬
유의사항
CASE WHEN (END_DATE - START_DATE +1) >= 30 THEN '장기 대여'
ELSE '단기 대여'
END AS RENT_TYPE
대여기간이 30일 이상인 대여기록을 출력하기 위해 CASE문을 사용한다.
반납일자 - 대여일자로 계산하는데 이 같은 경우 같은날 대여하고 반납하는 경우에는 대여기간을 0일로 계산하기 때문에 1일을 더해서 해당경우에 대한 대여기간 일수를 계산한다.
문제출처
https://school.programmers.co.kr/learn/courses/30/lessons/151138
도움이 되셨다면 공감 버튼과 댓글 남겨주세요오♥
'개발일지 > 코테 정복기' 카테고리의 다른 글
[프로그래머스/SQL] 조건에 부합하는 중고거래 상태 조회하기(Oracle) (0) | 2023.08.08 |
---|---|
[프로그래머스/SQL] 재구매가 일어난 상품과 회원 리스트 구하기(Oracle) (0) | 2023.08.07 |
[프로그래머스/SQL] 3월에 태어난 여성 회원 목록 출력하기(Oracle) (0) | 2023.08.04 |
[프로그래머스/SQL] 조건에 부합하는 중고거래 댓글 조회하기 (Oracle) (0) | 2023.07.04 |
[프로그래머스/SQL] 인기있는 아이스크림 (Oracle) (0) | 2023.07.01 |