🦛 문제 설명
다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 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)+1 >= 30 THEN '장기 대여' ELSE '단기 대여' END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
ORDER BY HISTORY_ID DESC;
- DATEDIFF(END_DATE, START_DATE) + 1 에서 +1 을 한 이유 :
END_DATE 와 START_DATE 의 날짜가 같으면 0이 나오는데 실제 대여한 기간은 1일이기 때문에 + 1이 필요하다.
🦛 두 날짜 간의 차이를 가져오는 함수
- DATEDIFF : 단순히 일 차이를 가져올 때 사용 (날짜1 - 날짜2)
DATEDIFF(날짜1, 날짜2)
- TIMESTAMPDIFF : 일 차이를 연, 분기, 월, 주, 일, 시, 분, 초로 지정하여 가져올 때 사용
TIMESTAMPDIFF(단위, 날짜1, 날짜2)
단위
- SECOND: 초
- MINUTE: 분
- HOUR : 시
- DAY : 일
- WEEK : 주
- MONTH : 월
- QUARTER : 분기
- YEAR : 연
'코딩테스트_문제풀이 > 프로그래머스' 카테고리의 다른 글
SQL 고득점 kit - 한 해에 잡은 물고기 수 구하기 (0) | 2024.06.16 |
---|---|
SQL 고득점 kit - 자동차 평균 대여 기간 구하기 (0) | 2024.06.16 |
SQL 고득점 kit - ROOT 아이템 구하기 (0) | 2024.06.16 |
SQL 고득점 kit - 잡은 물고기 중 가장 큰 물고기의 길이 구하기 (0) | 2024.06.15 |
SQL 고득점 kit - 특정 물고기를 잡은 총 수 구하기 (1) | 2024.06.15 |