미래를 예측하는 데이터분석가

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

시스템 & 데이터베이스/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 대여 가능 여부를 분별한 것