CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능' 을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중' 으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.
SELECT * FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
MAX (CASE WHEN '2022-10-16' BETWEEN DATE_FORMAT(start_date, '%Y-%m-%d') AND DATE_FORMAT(end_date, '%Y-%m-%d') THEN '대여중' ELSE '대여 가능' END) AS AVAILABILITY
'2022-10-16' 을 기준으로 start_date와 end_date사이의 기간은 '대여중' 이라고 표시하고 그 외는 '대여 가능'이라고 표시한다.
이 모든 컬럼의 명명은 AVAILABILITY 로 지정한다.
이 데이터들 중에서도 최대값(MAX)를 선별해냈다.
SELECT car_id , MAX( CASE WHEN '2022-10-16' BETWEEN DATE_FORMAT(start_date, '%Y-%m-%d') AND DATE_FORMAT(end_date, '%Y-%m-%d') THEN '대여중' ELSE '대여 가능' END) AS AVAILABILITY FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY car_id
SELECT car_id , MAX( CASE WHEN '2022-10-16' BETWEEN DATE_FORMAT(start_date, '%Y-%m-%d') AND DATE_FORMAT(end_date, '%Y-%m-%d') THEN '대여중' ELSE '대여 가능' END) AS AVAILABILITY FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY car_id ORDER BY car_id DESC
SELECT car_id, MAX ( CASE WHEN start_date <= '2022-10-16' AND end_date >= '2022-10-16' THEN '대여중' ELSE '대여 가능' END) AS AVAILABILITY FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY car_id ORDER BY car_id DESC;
MAX() 함수를 여기서 왜 꼭 사용해야하는지 계속 의문이 들었다.
MAX 함수는 CASE문의 결과 중에서 가장 큰 값을 선택하여 반환합니다.
이 경우에는 '대여중'이 '대여 가능'보다 크다고 판단하여,
대여 기간 중 대여 중인 경우에는 '대여중' 값을 반환하고,
대여 중이 아닌 경우에는 '대여 가능' 값을 반환합니다.