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

임정민·2023년 5월 26일

SQL 문제풀이

목록 보기
44/53
post-thumbnail

SQL 공부중 입니다. ✍✍✍

문제

https://school.programmers.co.kr/learn/courses/30/lessons/157340

풀이

이번 문제는 꽤 까다로워 다른 풀이를 참고하여 해결하였습니다. 저의 풀이, 아래와 같이 작성했을 시에는

SELECT CAR_ID, CASE
        WHEN TIMESTAMPDIFF(DAY,START_DATE,"2022-10-16") >= 0 AND
            TIMESTAMPDIFF(DAY,"2022-10-16",END_DATE) >= 0 THEN "대여중"
        ELSE "대여 가능"
        END AS "AVAILABILITY"
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    GROUP BY CAR_ID
    ORDER BY CAR_ID DESC;

정답처럼 나오는 것 같지만

CAR_ID로 GROUP BY 하면서 자동으로 중복 제거되는 과정 중 문제에서 요구하는 기간이 아닌 기간으로 통합되어버렸습니다.

위 사진처럼 2022-10-27 ~ 2022-10-27 사이의 대여 가능여부는 필요없는 정보이므로 GROUP BY 전의 조건을 걸어주거나 아예 다른 접근 방법이 필요했습니다.🐼🐼🐼

그리하여 다른 풀이 중 아래와 같이

SELECT CAR_ID, CASE
    WHEN SUM(IF("2022-10-16" BETWEEN START_DATE AND END_DATE,1,0)) > 0 THEN "대여중"
    ELSE "대여 가능"
    END AS "AVAILABILITY"
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    GROUP BY CAR_ID
    ORDER BY CAR_ID DESC;

GROUP BY 하되 IF문으로 대여기간 안에 2022-10-16 날짜가 속한다면 1, 아니라면 0으로 지정한후 이 값들을 CAR_ID로 통합하여 합이 0 초과인지 여부로 해결하는 방식을 찾을 수 있었습니다. CASE-WHEN, IF, SUM() 구문 등이 결합되는 형태로 아이디어는 떠올랐지만 구현하는데 아직은 어려움있어 스스로 해결하지는 못한 문제였습니다.🐕🐕🐕

감사합니다.

profile
https://github.com/min731

0개의 댓글