본문 바로가기

IT/SQL

[프로그래머스_SQL] 자동차 대여 기록에서 장기/단기 대여 구분하기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

또 프로그래머스 또 SQL 글을 적습니다...! 

 

문제: 2022년도 9월 에 속하는 대여 기록중 대여 기간이 30일 이상은 장기대여 미만은 단기대여로 출력

 

여자는 F 남자는 M 과 같이 값이 고정인 경우는

 

DECODE(GENDER, '여자', 'F', '남자', 'M')

 

이런 식으로 작성하는 편이 간단합니다. 

 

하지만 이번 문제처럼 30일 초과는 단기 이상은 장기와 같이 범위를 다룰 때는

CASE WHEN을 사용하여 푸는 것이 좋습니다.

(여러 벤더에서 돌아갈 쿼리를 짤 때는 DECODE 를 쓰려면 분기 처리를 해 줘야 하기 때문에 위에 들었던 예시 같은 경우도 CASE WHEN THEN END 로 처리합니다)

 

1
2
3
4
5
6
7
8
SELECT HISTORY_ID
        ,CAR_ID
        ,TO_CHAR(START_DATE, 'YYYY-MM-DD') START_DATE
        ,TO_CHAR(END_DATE, 'YYYY-MM-DD') END_DATE
        ,CASE WHEN END_DATE - START_DATE + 1 >= 30 THEN '장기 대여' ELSE '단기 대여' END  RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE TO_CHAR(START_DATE, 'YYYYMM'= '202209'
ORDER BY HISTORY_ID DESC
cs