새소식

Programmers Coding Test/MySQL

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

  • -

 

자동차 대여 기록에서 장기/단기 대여 구분하기

 

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

 

프로그래머스

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

programmers.co.kr

 

 

1)  문제

다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다.

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블은 아래와 같은 구조로 되어있으며, HISTORY_ID, CAR_ID, START_DATE, END_DATE 는 각각 자동차 대여 기록 ID, 자동차 ID,
대여 시작일, 대여 종료일을 나타냅니다.
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 
대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 
그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 
대여기록을 출력하는 SQL문을 작성해주세요. 

결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.

START_DATE와 END_DATE의 경우 예시의 데이트 포맷과 동일해야 정답처리 됩니다.

 

HISTORY_ID CAR_ID START_DATE END_DATE
INTEGER INTEGER DATE DATE
FALSE FALSE FALSE FALSE

 

 

 

 

 

 

2)  예시

 

예를 들어 CAR_RENTAL_COMPANY_CAR 테이블이 다음과 같다면

 

HISTORY_ID CAR_ID START_DATE END_DATE
1 4 2022-09-27 2022-11-27
2 3 2022-10-03 2022-11-04
3 2 2022-09-05 2022-09-05
4 1 2022-09-01 2022-09-30
5 3 2022-09-16 2022-10-15

 

 

2022년 9월의 대여 기록 중 '장기 대여' 에 해당하는 기록은 대여 기록 ID가 1, 4인 기록이고,

 '단기 대여' 에 해당하는 기록은 대여 기록 ID가 3, 5 인 기록이므로 대여 기록 ID를 기준으로 내림차순 정렬하면 

다음과 같이 나와야 합니다.

 

 

 

HISTORY_ID CAR_ID START_DATE END_DATE RENT_TYPE
5 3 2022-09-16 2022-10-13 단기 대여
4 1 2022-09-01 2022-09-30 장기 대여
3 2 2022-09-05 2022-09-05 단기 대여
1 4 2022-09-27 2022-10-26 장기 대여

 

 

 

 

3)  풀이

 

1. 테이블에서 자동차 정보를 조회하되, START_DATE와 END_DATE는 YYYY-MM-DD 형식으로 나오게 합니다.

● SELECT HISTORY)ID, CAR_ID, DATE_FOMMAT(START_DATE, '%Y-%m-%d') AS START_DATE, DATE_FOMRMAT(END_DATE, '%Y-%m-%d') FROM CAR_RENTAL_COMPANY_HISTORY

 

 

2. RENT_TYPE라는 열을 추가하여, 대여일자가 30일 이상인 경우, 장기대여, 그렇지 않으면 단기대여로 출력합니다.

● IF(DATEDIFF(START_DATE, END_DATE) +1 >=30, '장기 대여', '단기 대여') AS RENT TYPE

 

※ IF(조건, 값1, 값2)

조건이 맞으면 값1, 그렇지 않으면 값2가 출력됩니다.

 

※ DATEDIFF(날짜1, 날짜2)

날짜1과 날짜2의 차이가 몇일인지 구합니다. (날짜1 - 날짜2)

+1을 해준 이유는, 날짜1과 날짜2가 동일한 날짜라도 대여일은 1일로 계산되어야하기 때문입니다.

 

 

3. 대여시작일이 2022년 9월인 차량만 조회합니다.

● WHERE START_DATE LIKE '2022-09%'

WHERE START_DATE BETWEEN '2022-09-01' AND '2022-09-30'도 됩니다.

 

 

4. 대여기록ID의 내림차순으로 정렬합니다.

● ORDER BY HISTORY_ID DESC

 

 

 

 

 

 

4)  코드

1. IF를 사용했을 때

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,
IF(DATEDIFF(END_DATE, START_DATE) +1 >= 30, '장기 대여', '단기 대여') AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC;

 

 

 

2. CASE를 사용했을 때

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;

 

※ CASE 

조건부로 값을 반환하거나 동작을 수행할 때 사용되는 구문

 

1) 단순케이스식

CASE 표현식
   WHEN 값1 THEN 결과1
   WHEN 값2 THEN 결과2
   ...
   ELSE 기본값
END

 

2) 조건케이스식

CASE
   WHEN 조건1 THEN 결과1
   WHEN 조건2 THEN 결과2
   ...
   ELSE 기본값
END

 

 

 

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.