Coding Test/SQL Coding Test
[프로그래머스 / SQL] - 자동차 대여 기록에서 장기/단기 대여 구분하기
nam_ji
2024. 6. 11. 22:19
자동차 대여 기록에서 장기/단기 대여 구분하기
문제
- 자동차 회사의 자동차 대여 기록 정보가 담긴 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블이 있습니다.
- CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서
- 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해
- 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여'로 표시하는 컬럼을
- 컬럼명 RENT_TYPE으로 수정하여
- 대여 기록 ID를 기준으로 내림차순 정렬하여
- 조회하는 문제입니다.
프로그래머스 코드
- 두 가지의 풀이를 가져와 봤습니다.
- 공통적으로 SELECT에 HISTORY_ID, CAR_ID, DATE_FORMAT을 이용하여 START_DATE와 END_DATE 조회하는 부분은 같은 QUERY 입니다.
- 다른 점은 IF문 사용하는 방법과 CASE문을 사용한 방법입니다.
- 먼저 IF문은 첫 번째 인자는 조건, 두 번째는 참일 때, 세 번째는 거짓일 때를 작성합니다.
- CASE문은 CASE를 작성하고 WHEN에 조건을 THEN에는 결과를 작성합니다.
- END 뒤에는 출력될 컬럼명을 작성하는 방법입니다.
- IF문과 CASE문 둘 다 특정 날짜를 계산해야 하기 때문에 DATEDIFF 함수를 사용했습니다.
- DATEDIFF 함수는 첫 번째 인자에서 두 번쨰 인자를 빼는 함수입니다.
여기서 중요한 점은 날짜에서 날짜를 빼면 우리가 원하는 날짜보다 1이 적게 출력되기 때문에 + 1을 해주거나 코드에서 30 대신 29로 하여 + 1을 해주지 않는 방법도 있습니다. - 이렇게 30일 이상인지 미만인지 구분할 수 있게 하고
- FROM을 통해 조회하고 싶은 컬럼이 속한 테이블 명을 작성하고
- WHERE절을 통해 특정 날짜 내에서 조회할 수 있게 합니다.
- 마지막으로 ORDER BY를 통해 정렬 순서를 정해줍니다.
-- 코드를 입력하세요
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 DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
ORDER BY HISTORY_ID DESC;
# 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 '단기 대여'
# # WHEN DATEDIFF(END_DATE, START_DATE) < 30 THEN '단기 대여'
# END AS RENT_TYPE
# FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
# WHERE DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
# ORDER BY HISTORY_ID DESC;