[프로그래머스] Lv.3 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (CASE, GROUP BY, MAX)

[프로그래머스] Lv.3 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (CASE, GROUP BY, MAX)
muaga's avatar
May 28, 2024
[프로그래머스] Lv.3 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (CASE, GROUP BY, MAX)
Contents
풀이
 
notion image
notion image


SELECT CAR_ID, MAX(CASE WHEN '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
 

풀이


◽ GROUP BY

SELECT CAR_ID, CASE WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN '대여중' ELSE '대여 가능' END AS AVAILABILITY FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY ORDER BY CAR_ID DESC
첫 번째 조건인 ‘2022-10-16’에 대여가능 or 대여중인 지 체크를 해 보면 조건에 부합한 기록들이 나온다.
notion image
CAR_ID가 중복으로 반환되는 이유는 각 날짜별로 차 1대의 대여 기록이 존재하기 때문이다. 그래서 그룹화 해준다. 그룹화 하면 각 차 별 현재 대여 상태을 확인할 수 있다.
SELECT CAR_ID, CASE WHEN '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
notion image
 
 

◽ MAX

여기서 중요한 점은 2022-10-16에 대여가 가능한 지를 확인해야 한다.
notion image
notion image
CAR_ID = 29 인 행을 보면 대여중 을 가지고 있다. 대여 기간이 끝나면 해당 행은 대여 가능이 될 것이다. 대여중이라는 것은 대여 기간이 끝나지 않았다는 것이다.
그래서 MAX 함수를 사용해, ‘대여중’ 과 ‘대여 가능’ 중 사전적으로 우선 순위인 대여중 을 가진 행을 반환해야 한다.
SELECT CAR_ID, ⭐ MAX(CASE WHEN '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
notion image
그럼 ‘2022-10-16’ 기준으로 대여 상태를 확인할 수 있다.
Share article

muaga's Hub