[프로그래머스 | SQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기

게으른 완벽주의자·2023년 2월 10일
2

프로그래머스

목록 보기
69/83
post-custom-banner

프로그래머스_자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기

Level 3치고 은근 조건이 까다롭다

내 답안 코드

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

CAR_ID별로 여러 기록이 있고, 그 중에서도 가장 나중에 렌탈 기록이 끝난걸 확인해야 한다 -> MAX
2022년 10월 16일에 대여중 -> 날짜 BETWEEN, A AND B일 때 범위는 [A,B] 즉 A와 B를 모두 포함한다
모든 기록이 아닌 CAR_ID별로 기록 -> GROUP BY

추가 답안 코드

SELECT CAR_ID,
(CASE WHEN CAR_ID IN (
    SELECT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE '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

MAX가 아닌 서브쿼리를 활용해서도 풀어보았다
서브쿼리를 쓰는 풀이법은 잘 떠오르질 않는 것 같다..

profile
데이터를 공부하고 있습니다
post-custom-banner

2개의 댓글

comment-user-thumbnail
2023년 2월 14일

첫번째 코드에서 case when 구문을 max()함수로 감싸신 이유가 나중에 렌탈 기록이 끝난 것을 보려고 하는 이유는 이해가 되었는데 어떻게 max()로 그것이 가능한건지 궁금합니다!

1개의 답글