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

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

프로그래머스

목록 보기
69/83

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

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
데이터를 공부하고 있습니다

2개의 댓글

comment-user-thumbnail
2023년 2월 14일

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

1개의 답글

관련 채용 정보