본문 바로가기
코딩테스트/프로그래머스

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

by sycareer 2023. 11. 24.

문제

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

 

 

1. CASE WHEN 절로 '대여중'과 '대여 가능'은 기간별로 구분했는데 이걸 CAR_ID별로 어떻게 하나씩 출력하나에서 고민 시작

2. 동기에게 들으니 대여중, 대여 가능을 MAX를 이용해서 풀이한 방법이 있다고 했음.

3. MAX 말고 다른 방법은 없을까 생각하다가 ROW_NUMBER() 이 생각났음.

  - CAR_ID별로 '대여중'인 ROW를 제일 위에 정렬하고 ROW_NUMBER을 1부터 부여해서 ROW_NUMBER이 1인 ROW만 출력하여 해결!

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT A.CAR_ID, A.AVAILABILITY
  FROM (
    SELECT ROW_NUMBER() OVER(PARTITION BY CAR_ID ORDER BY CAR_ID) RNUM
         , CAR_ID
         , CASE WHEN TO_CHAR(START_DATE, 'YYYY-MM-DD'<= '2022-10-16'
                 AND TO_CHAR(END_DATE, 'YYYY-MM-DD'>= '2022-10-16'
                THEN '대여중'
                ELSE '대여 가능' END AS AVAILABILITY
      FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
     ORDER BY CAR_ID DESC, 3 DESC
  ) A
 WHERE A.RNUM = 1
;
cs