inblog logo
|
muaga's Hub
    Programmers-MySQL

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

    [프로그래머스] Lv.3 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (CASE, GROUP BY, MAX)
    muaga's avatar
    muaga
    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
    Contents
    답풀이

    muaga's Hub

    RSS·Powered by Inblog