문제가 원하는 것을 정리하면
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로 묶어서 해당 자동차의 대여 여부를 한 번만 출력할 수 있게 만든 것이다.
'코딩테스트' 카테고리의 다른 글
프로그래머스 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2023.09.08 |
---|---|
프로그래머스 헤비 유저가 소유한 장소 (0) | 2023.09.07 |
프로그래머스 조건에 맞는 사용자 정보 조회하기 (0) | 2023.09.06 |
프로그래머스 없어진 기록 찾기 (0) | 2023.09.06 |
프로그래머스 대여 기록이 존재하는 자동차 리스트 구하기 (0) | 2023.09.05 |