SQL/문제풀이

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

응엉잉 2024. 1. 3. 15:47

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT car_id,
    CASE WHEN MAX(end_date) < '2022-10-16' THEN '대여 가능'
    ELSE '대여중' END 
    AS availability
FROM car_rental_company_rental_history
WHERE start_date <= '2022-10-16'
GROUP BY car_id
ORDER BY car_id DESC

 

데이터에 있는 대여 기간의 case를 2022-10-16 기준으로 총 5가지 case로 분류할 수 있다.

나는 MAX 함수를 사용해서 조건을 만들고싶었기에, 대여 기간이 22년 10월 16일 이후 시작되는 경우는 제외해주었다.

MAX 함수를 car_id에 대해 사용하고 싶었으므로, GROUP BY 함수를 이용했다.

대여 가능한 기간의 case는 MAX(end_date)가 22년 10월 16일 이전인 경우밖에 없기에,

CASE WHEN 문을 사용하여 해당 조건을 만족하면 '대여 가능', 그렇지 않으면 '대여중' 으로 나오게끔 했다. 

 

시간의 case를 머리로 나누기엔 복잡해서 그림을 그려서 해결했는데,

다른 사람들의 풀이가 궁금해졌다!

https://suminii.tistory.com/entry/MYSQL-%EC%9E%90%EB%8F%99%EC%B0%A8-%EB%8C%80%EC%97%AC-%EA%B8%B0%EB%A1%9D%EC%97%90%EC%84%9C-%EB%8C%80%EC%97%AC%EC%A4%91-%EB%8C%80%EC%97%AC-%EA%B0%80%EB%8A%A5-%EC%97%AC%EB%B6%80-%EA%B5%AC%EB%B6%84%ED%95%98%EA%B8%B0

 

[MYSQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (프로그래머스/Level 3)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설

suminii.tistory.com

 

1. 조건에 해당하는 car_id를 BETWEEN 함수 이용해서 뽑기

SELECT car_id
FROM car_rental_company_rental_history
WHERE '2022-10-16' BETWEEN start_date AND end_date

 

2. 1번 쿼리를 SELECT문에 이용하기

이떄 car_id 별로 조건을 사용하고 싶은거니까 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 start_date AND end_date
        ) THEN '대여중'
        ELSE '대여가능'
	END 'availability'
FROM car_rental_company_rental_history
GROUP BY car_id