문제풀이/프로그래머스

[MYSQL/Lv1] 자동차 대여 기록에서 장기/단기 대여 구분하기

bbugi 2023. 4. 26. 15:04

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

 

프로그래머스

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

programmers.co.kr


MySQL - Lv1 문제

■ 문제

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.

 

 

■ 문제 풀이시 유의할 점

  1. DATE_FORMAT 을 활용하여 프로그래머스 예시에 나온 출력 형태와 맞춰주기
  2. DATEDIFF : 두 날짜 사이의 차이값 구하기
  3. CASE 문법을 활용하여 '장기 대여', '단기 대여' 로 표시되어 출력되게 하기(띄어쓰기 주의)
    • 문제에서 대여기간 30일 이상 일 때 장기 대여로 표시하라고 조건을 부여했는데, SQL 문법에서 조건을 줄 때 30일로 주면 틀렸다고 나옴.
    • 예시로 주어진 값을 보면 2022-09-01 ~ 2022-09-30 의 경우 30일 대여기간으로 장기대여라고 표현되어있는데 실제 두 날짜의 차이값을 확인하면 29일로 출력된다.
    • 대여한 당일도 대여기간에 포함해야 하기 때문에 DATEDIFF 로 구한 값에 +1을 해줘야 한다.
  4. WHERE __ LIKE '2022-09%' : WILDCARD(%)를 사용하여 문제에서 주어진 조건 (9월에 속하는 대여기록) 을 만족하는 결과값만 가져오도록 필터링
SELECT HISTORY_ID, CAR_ID, DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE, 
DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE, 
CASE WHEN DATEDIFF(END_DATE, START_DATE)+1 >= 30 THEN '장기 대여'
    ELSE '단기 대여'
    END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC;