[programmers] 자동차 대여 기록에서 장기/단기 대여 구분하기 - MySQL
자동차 대여 회사의 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월인 대여 기록에 대해 대여 기간이 30일 이상이면 '장기 대여', 그렇지 않으면 '단기 대여'로 표시하는 컬럼(RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성하는 문제입니다. 이를 해결하기 위해 CASE WHEN문을 사용하여 조건에 따라 다른 값을 부여해서 칼럼을 생성하였습니다.
Jan 24, 2024
문제 설명
다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은
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
의 경우 예시의 데이트 포맷과 동일해야 정답처리 됩니다.solution.sql
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 WHEN문을 통해 if문처럼 조건에 따라 다른 값을 부여해서 칼럼을 생성할 수 있다.
CASE WHEN '조건' THEN '조건을 만족할 시 출력할 데이터' ELSE '조건을 만족하지 않을 때 출력할 데이터' END
결론!
해당 문제를 풀면서 MySQL에서도 if문과 같은 역할을 하는 CASE WHEN문이 있다는 것을 알게 되었다.
Share article