다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다.
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블은 아래와 같은 구조로 되어있으며, HISTORY_ID, CAR_ID, START_DATE, END_DATE 는 각각 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일을 나타냅니다.
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요.
결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
START_DATE와 END_DATE의 경우 예시의 데이트 포맷과 동일해야 정답처리 됩니다.
HISTORY_ID
CAR_ID
START_DATE
END_DATE
INTEGER
INTEGER
DATE
DATE
FALSE
FALSE
FALSE
FALSE
2) 예시
예를 들어 CAR_RENTAL_COMPANY_CAR 테이블이 다음과 같다면
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
장기 대여
3) 풀이
1. 테이블에서 자동차 정보를 조회하되, START_DATE와 END_DATE는 YYYY-MM-DD 형식으로 나오게 합니다.
● SELECT HISTORY)ID, CAR_ID, DATE_FOMMAT(START_DATE, '%Y-%m-%d') AS START_DATE, DATE_FOMRMAT(END_DATE, '%Y-%m-%d') FROM CAR_RENTAL_COMPANY_HISTORY
2. RENT_TYPE라는 열을 추가하여, 대여일자가 30일 이상인 경우, 장기대여, 그렇지 않으면 단기대여로 출력합니다.
● IF(DATEDIFF(START_DATE, END_DATE) +1 >=30, '장기 대여', '단기 대여') AS RENT TYPE
WHERE START_DATE BETWEEN '2022-09-01' AND '2022-09-30'도 됩니다.
4. 대여기록ID의 내림차순으로 정렬합니다.
● ORDER BY HISTORY_ID DESC
4) 코드
1. IF를 사용했을 때
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,
IF(DATEDIFF(END_DATE, START_DATE) +1 >= 30, '장기 대여', '단기 대여') AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC;
2. CASE를 사용했을 때
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) + 1 >= 30 THEN '장기 대여'
ELSE '단기 대여'
END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC;
※ CASE
조건부로 값을 반환하거나 동작을 수행할 때 사용되는 구문
1) 단순케이스식
CASE 표현식
WHEN 값1 THEN 결과1
WHEN 값2 THEN 결과2
...
ELSE 기본값
END
2) 조건케이스식
CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
...
ELSE 기본값
END