문제
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 |
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
Oracle - 프로그래머스 코딩테스트 [즐겨찾기가 가장 많은 식당 정보 출력하기] (1) | 2023.11.27 |
---|---|
Oracle - 프로그래머스 코딩테스트 [대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기] (0) | 2023.11.27 |
Oracle - 프로그래머스 코딩테스트 [조건에 맞는 사용자와 총 거래금액 조회하기] (1) | 2023.11.22 |
Oracle - 프로그래머스 코딩테스트 [조건에 맞는 사용자 정보 조회하기] (2) | 2023.11.22 |
Oracle - 프로그래머스 코딩테스트 [이름이 있는 동물의 아이디] (0) | 2023.11.07 |