62번 - 자동차 대여 기록에 장기/단기 대여 구분하기
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
처음 풀때는 when 절 안에 서브쿼리를 이용해 풀려고 했으나 결과는 나왔지만 장기대여, 단기대여 구분이 되지 않고 그냥 단기대여로만 나왔었다. 그리고 나서 30일 계산을 어떻게 하지 생각하다 도저히 모르겠어서 구글링한 결과, datediff()라는 날짜. 시간 차이 일수 계산을 해주는 함수를 발견했다.
<나의 풀이>
select history_id,
car_id,
date_format(start_date, '%Y-%m-%d') 'start_date',
date_format(end_date, '%Y-%m-%d') 'end_date',
case when datediff(end_date, start_date)+1 >= 30 then '장기 대여'
else '단기 대여' end 'rent_type'
from car_rental_company_rental_history
where start_date like '2022-09%'
order by 1 desc
1. 결과값에서 날짜의 시간은 안나와있기 때문에 date_fomat() 함수를 통해 년월일만 나오도록 함
--> date_format(start_date, '%Y-%m-%d') 'start_date',
--> date_format(end_date, '%Y-%m-%d') 'end_date',
2. 대여기간 30일 이상을 찾아야 하기 때문에 datediff() 라는 시간 날짜 계산 함수 이용
--> datediff(end_date, start_date)+1
3. 대여기간 30일을 찾았다면 30일 이상이면 장기대여 아니면 단기대여라고 표시를 해줘야하기 때문에 case when문 사용
--> case when datediff(end_date, start_date)+1 >= 30 then '장기 대여'
else '단기 대여' end 'rent_type'
4. 시작기간이 22년도 9월만 찾고 있기 때문에 --> where start_date like '2022-09%'
5. 순서는 기록 아이디 기준으로 내림차순 --> order by 1 desc
datediff(날짜1, 날짜2): 내부의 계산은 날짜1 - 날짜2
'✨Today I Learned > MySQL' 카테고리의 다른 글
[MySQL] 대여 횟수가 많은 자동차들의 월 별 대여 횟수 구하기 (0) | 2024.08.01 |
---|---|
[MySQL] 우유와 요거트가 담긴 장바구니 (6) | 2024.07.23 |
SQL codekata 58번 - 취소되지 않은 진료 예약 조회하기 (0) | 2024.07.16 |
SQL CODEKATA 55번 - 조건에 맞는 사용자 정보 조회하기 (0) | 2024.07.15 |
사전캠프 10일차 - SQL 5주차 정리 / SQL 코드카타 11번~19번 (0) | 2024.06.07 |