다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 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 RENT_TYPE
5 3 2022-09-16 2022-10-13 단기 대여
4 1 2022-09-01 2022-09-30 장기 대여
3 2 2022-09-05 2022-09-05 단기 대여
1 4 2022-09-27 2022-10-26 장기 대여
START_DATE와 END_DATE의 경우 예시의 데이트 포맷과 동일해야 정답처리 됩니다.
SELECT
HISTORY_ID,
CAR_ID,
DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE,
DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE,
CASE WHEN DATEDIFF(END_DATE, START_DATE) < 29 THEN '단기 대여'
ELSE '장기 대여'
END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC;
조건에 따라서 값을 지정해주는 조건부 로직을 위해 CASE 문법을 사용한다.
CASE 컬럼
WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
ELSE 값3
END
여러가지의 조건이 있을 경우 WHEN 조건 THEN 값의 형식으로 표기한다.
조건부 로직의 분기 처리를 다 완료한 경우 END로 CASE의 끝을 알린다.
두 날짜 사이 차이를 계산하는 함수.
datepart : 계산에 사용할 단위 지정 ex) year : 연도 간 차이 계산, month : 월 간 차이 계산start : 시작 날짜/시간end : 종료 날짜/시간datediff() 함수와 관련된 자세한 설명은 이 블로그에 아주 자세히 나와있다!!