시스템 & 데이터베이스/SQL
[SQL] 프로그래머스 자동차 대여 기록에서 대여중/ 대여 가능 여부 구분하기
잘하다연
2025. 1. 10. 21:05
문제는 자동차 ID별로 22년10월16일 기준 그 자동차가 대여중인지 아닌지 구분하는 열을 만드는 것이다.

여기서 포인트는 날짜 별로 CAR_ID별로 여러 번 중복으로 대여 중이거나 대여한 이력이 한 TABLE안에 존재한다.
어떻게 해당 날짜에 중복되어 대여중인지 구분할 수 있는가가 포인트 !!
내 풀이
SELECT
CAR_ID,
CASE WHEN
SUM(CASE WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE
THEN 1 ELSE 0
END) = 0
THEN '대여 가능' ELSE '대여중' END AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC
사실 정답을 슬쩍 보았다.
CASE WHEN 을 사용해서 날짜에 해당되면 대여중이라고 아니면 대여 가능이라고 우선 풀다가
대여중이 하나라도 있는 CAR_ID를 대여중이라고 나오게끔 하는 방법이 떠오르지 않았다.
CASE WHEN을 중복으로 사용해 대여중이 하나라도 있으면 1이상의 값이므로 0이면 대여 가능 아니면 대여중으로 SUM을 사용해 문제를 풀었다.
핵심KEY
- CASE WHEN의 중복 사용
- SUM 함수를 사용해 1,0 대여 가능 여부를 분별한 것