https://school.programmers.co.kr/learn/courses/30/lessons/157340
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를 머리로 나누기엔 복잡해서 그림을 그려서 해결했는데,
다른 사람들의 풀이가 궁금해졌다!
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
'SQL > 문제풀이' 카테고리의 다른 글
[프로그래머스] 주문량이 많은 아이스크림들 조회하기 (0) | 2024.01.05 |
---|---|
[프로그래머스] 저자 별 카테고리 별 매출액 집계하기 (0) | 2024.01.05 |
[프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2024.01.02 |
[프로그래머스] 오랜 기간 보호한 동물 (1) (0) | 2024.01.02 |
[프로그래머스] 조건에 맞는 도서와 저자 리스트 출력하기 (0) | 2024.01.02 |