코딩테스트

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

코드 죄수 2023. 9. 7. 11:52

문제가 원하는 것을 정리하면

 

1. 2022 - 10 -16일 대여중인지 확인 후

2. 대여 여부에 따라 달라지는 AVAILABILITY 속성 추가이다.

 

 

테이블을 보고 하나씩 sql문을 작성해 나아가면

 

먼저 1. 2022 - 10 -16일 대여중인지 확인을 WHERE절을 사용하여 날짜를 확인한다.

SELECT DISTINCT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE '2022-10-16' BETWEEN START_DATE AND END_DATE

BETWEEN을 사용하여 대여중이거나 반납일자가 16일인 경우도 포함하여  대여중인 자동차의 정보를 조회하면 된다.

 

그다음 2. 대여 여부에 따라 달라지는 AVAILABILITY 속성 추가하기 위해 위의 쿼리문을 서브쿼리로 사용하여 해당 자동차 리스트들을 "대여중"으로 출력하고 나머지는 "대여 가능"이라고 출력시키면 된다.

SELECT A.CAR_ID, IF(B.CAR_ID is NULL, "대여 가능", "대여중") AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY A LEFT JOIN (
    SELECT DISTINCT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE '2022-10-16' BETWEEN START_DATE AND END_DATE
    ) B ON A.CAR_ID = B.CAR_ID
GROUP BY CAR_ID
ORDER BY A.CAR_ID DESC;

 

우선 LEFT JOIN을 사용하여 대여중이 아닌 자동차도 출력이 될 수 있게 만든다.

 

그다음 IF문을 사용하여 대여중이 아닌 자동차 인지 아닌지 판단하여 대여 여부를 출력한다.

 

GROUP BY를 사용하여 CAR_ID를 묶는 이유는 해당 자동차의 대여 기록이 여러 개 있기 때문에 CAR_ID로 묶어서 해당 자동차의 대여 여부를 한 번만 출력할 수 있게 만든 것이다.