프로그래머스 - SQL 고득점 Kit - 자동차 대여 기록에서 장기/단기 대여 구분하기
자동차 대여 회사의 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서
2022년 9월에 시작한 대여 기록 중, 대여 기간이 30일 이상이면 '장기 대여',
그보다 짧으면 '단기 대여'로 구분해 출력해야 합니다.
RENT_TYPEHISTORY_ID 내림차순| 컬럼명 | 타입 | NULL 여부 | 설명 |
|---|---|---|---|
| HISTORY_ID | INTEGER | NOT NULL | 대여 기록 ID |
| CAR_ID | INTEGER | NOT NULL | 자동차 ID |
| START_DATE | DATE | NOT NULL | 대여 시작일 |
| END_DATE | DATE | NOT NULL | 대여 종료일 |
SELECT
HISTORY_ID,
CAR_ID,
START_DATE,
END_DATE,
CASE
WHEN DATEDIFF(END_DATE, START_DATE) + 1 >= 30 THEN '장기 대여'
ELSE '단기 대여'
END AS RENT_TYPE
FROM
CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE
DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
ORDER BY
HISTORY_ID DESC;
WHERE DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
DATE_FORMAT()으로 날짜를 YYYY-MM 형태로 바꿔 9월에 해당하는 데이터만 필터링합니다.CASE
WHEN DATEDIFF(END_DATE, START_DATE) + 1 >= 30 THEN '장기 대여'
ELSE '단기 대여'
END AS RENT_TYPE
DATEDIFF()는 두 날짜 간 일수 차이를 계산합니다.+ 1을 해줘야 정확한 대여 일수를 구할 수 있습니다.'장기 대여', 미만은 '단기 대여'로 구분합니다.ORDER BY HISTORY_ID DESC
HISTORY_ID를 기준으로 내림차순 정렬합니다.| 구문 유형 | 목적 | 예시 |
|---|---|---|
INSERT INTO | 새로운 행(데이터) 추가 | INSERT INTO users (id, name) VALUES (1, 'Kim'); |
ALTER TABLE | 테이블 구조(컬럼) 변경 | ALTER TABLE users ADD COLUMN age INT; |
SELECT | 데이터 조회 및 가공 | SELECT name, CASE WHEN age > 20 THEN '성인' END AS 구분 FROM users; |
이번 문제에서는
RENT_TYPE컬럼을 결과로 보여주는 것일 뿐, 테이블에 실제로 추가하는 게 아니므로SELECT문만 사용