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


답
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 대여중인 지 체크를 해 보면 조건에 부합한 기록들이 나온다.

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

◽ MAX
여기서 중요한 점은 2022-10-16에 대여가 가능한 지를 확인해야 한다.


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

그럼 ‘2022-10-16’ 기준으로 대여 상태를 확인할 수 있다.
Share article