프로그래머스 SQL Lv 1 - 자동차 대여 기록에서 장기/단기 대여 구분하기

정새·2023년 11월 16일
0

이번에 다뤄볼 문제는 IF-ELSE 조건을 활용하여 데이터를 조회하는 문제입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/151138
프로그래머스 기준 Lv.1 문제이며, 풀이 후 해설과 함께 정리해보도록 하겠습니다.


문제에서 주어진 요구사항은 다음과 같습니다.

1. 데이터 테이블에서 대여 시작일이 2022년 9월에 속하는 기록을 조회
2. 대여 기간이 30일 이상이라면, '장기 대여' 아니라면 '단기 대여'로 표현
3. 이 때의 컬럼명은 RENT_TYPE으로 표현
4. 모든 결과는 대여 기록 ID를 기준으로 내림차순 정렬
5. 대여 시작일과 대여 종료일은 모두 'YYYY-MM-DD' 형태로 표현
6. 이 외 모든 컬럼은 표현

이를 해결하기 위해선 IF-ELSE 와 데이터 필터링 조건 처리가 각각 필요합니다.

또한 DATE 컬럼은 예시 포맷과 동일하게 년/월/일 형태로 정리해주어야 합니다.

이러한 요구사항에 맞추어 조합하여 주어진 문제에 대한 SQL문을 작성해보겠습니다.


가장 먼저 조회가 필요한 컬럼들과 테이블에 대한 SELECT 문을 작성합니다.

CAR_RENTAL_COMPANY_RENTAL_HISTORY에서 조회하고자 하는 컬럼을 정의합니다.

SELECT HISTORY_ID, CAR_ID, START_DATE, END_DATE
	FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;

이후 조회하고자 하는 데이터에 대해 WHERE을 활용하여 조건을 설정합니다.

이 때, 대여 시작일이 2022년 9월인 데이터만을 가져오도록 조건을 설정합니다.

SELECT HISTORY_ID, CAR_ID, START_DATE, END_DATE
	FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;
		WHERE TO_CHAR(START_DATE, 'YYYY-MM') = '2022-09'

다음으론 이번 문제의 핵심인 RENT_TYPE 컬럼을 생성해주어야 합니다.

해당 컬럼은 대여 종료일 - 시작일 기준 30일로 장기/단기를 표현해야합니다.

종료일에서 시작일을 뺀 결과가 30일 이상이라면 장기, 그 이외엔 단기로 정의합니다.

1을 더해준 이유는 월이 바뀌면서 값이 달라지는 경우를 방지했습니다.

1을 더하는 대신 다른 방법이 있다면 언제든 댓글 남겨주셨으면 합니다!!

SELECT HISTORY_ID, CAR_ID, START_DATE, END_DATE
	CASE WHEN (END_DATE - START_DATE) + 1 >= 30 
    		THEN '장기 대여'
            ELSE '단기 대여' 
            END AS RENT_TYPE
      FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;
          WHERE TO_CHAR(START_DATE, 'YYYY-MM') = '2022-09'

마지막으로 대여 기록 ID를 기준으로 내림차순을 정의해주어야 합니다.

또한 START_DATE, END_DATE에 대해 각각 포맷을 변경해주도록 하겠습니다.

SELECT HISTORY_ID, CAR_ID, TO_CHAR(START_DATE, 'YYYY-MM-DD') AS START_DATE,
						   TO_CHAR(END_DATE, 'YYYY-MM-DD') AS END_DATE,
	CASE WHEN (END_DATE - START_DATE) + 1 >= 30 
    		THEN '장기 대여'
            ELSE '단기 대여' 
            END AS RENT_TYPE
      FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;
          WHERE TO_CHAR(START_DATE, 'YYYY-MM') = '2022-09'
			ORDER BY HISTORY_ID DESC;

복잡해보였지만 점진적 해결을 통해 손쉽게 해결해낼 수 있었습니다.

쉽게 해결한 것처럼 보여지지만 조건 설정에서 에러가 발생해 꽤나 시간이 걸렸습니다..


이번 문제 또한 단순 풀이는 맞았지만, 최적의 방법인지 알 수 없습니다.

다른 사람들의 코드를 읽고 배워가며, 최적화된 코드를 작성할 수 있도록 노력하겠습니다.

긴 글 읽어주셔서 감사합니다.

profile
intersection for analysis, modeling, science ... working on it !

0개의 댓글

관련 채용 정보