SQL 문제

문제 59. 자동차 대여 기록에서 대여 중/ 대여(난이도 10)(MAX와 BETWEEN)

kagan-draca 2024. 7. 26. 18:05

 

문제를 보고 쉽겠는데 생각했다 코 깨졌다...

 

처음에

 

CASE YEAR(END_DATE) < '2022' && MONTH (END_DATE) < '10' && DAY(END_DATE)   < '16') 

||  CASE YEAR( START_DATE ) > '2022' && MONTH (START_DATE) > '10' && DAY( START_DATE ) > '16')

 

~~~~~

THEN '대여중'

ELSE '대여 가능'

END AS 'AVAILABILITY'

 

이런 식으로 모든 경우를 다 적을 생각이었다...

 

결국 못 풀고 다른 사람의 코드를 보니,

 

CASE
WHEN MAX('2022-10-16' BETWEEN START_DATE AND END_DATE) THEN '대여중'
ELSE '대여 가능'
END AS 'AVAILABILITY'

 

으로 BETWEEN 함수로 간략하게 표현할 수 있었다!!!

 

BETWEEN 함수는 TRUE, FALSE를 반환하는데

 

여기에 MAX('2022-10-16' BETWEEN START_DATE AND END_DATE)로 사용하는 이유는,

 

TRUE = 1, FALSE = 0으로 

 

같은 자동차에 대한 대여 날짜가 하나라도 TRUE가 있으면,

 

1 > 0 기 때문에 무조건 '대여중'을 띄워주기 때문이었다!!!

(이거 이해할려고 30분 넘게 생각함 ㅋㅋㅋㅋㅋㅋ)

 

제출한 코드 : 

 

SELECT CAR_ID,
CASE
WHEN MAX('2022-10-16' BETWEEN START_DATE AND END_DATE) THEN '대여중'
ELSE '대여 가능'
END AS 'AVAILABILITY'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC