🤷♀️ 문제
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE )을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
💡 1) 2022년 9월에 속하는 대여 기록 2) 대여 기간 ≥ 30 = ‘장기 대여’ / 대여 기간 < 30 = ‘단기 대여’ ⇒ 컬럼명 : RENT_TYPE 3) 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일, RENT_TYPE 표출 3) 대여 기록 ID를 기준으로 내림차순
ℹ️ 테이블
- 자동차 대여 기록 정보 (CAR_RENTAL_COMPANY_RENTAL_HISTORY)Column name Type Nullable
HISTORY_ID INTEGER FALSE CAR_ID INTEGER FALSE START_DATE DATE FALSE END_DATE DATE FALSE
✅ 답안
1. MYSQL ver.
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;
2. ORACLE ver.
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 1=1
AND TO_CHAR(START_DATE, 'YYYY-MM-DD') LIKE '2022-09%'
ORDER BY HISTORY_ID DESC
;
🌟 CHECK POINT
- 일수 구하는 방법
- MYSQL ⇒ DATEDIFF() 함수 사용구분자 약어
DATEDIFF(구분자, 시작일, 종료일) : 구분자에 따라 두 일자의 차이를 구해 int로 반환
년도 | year | yy, yyyy |
분기 | quarter | q, qq |
월 | month | m, mm |
일 | day | d, dd |
주 | week | wk |
시간 | hour | m |
분 | minute | n, mi |
초 | second | s, ss |
밀리초 | millisecond | ms |
마이크로초 | microsecond | mcs |
나노초 | nanosecond | ns |
-
- ORACLE ⇒ 종료일 - 시작일
'공부 > CodingTest' 카테고리의 다른 글
[프로그래머스/SQL] 자동차 평균 대여 기간 구하기 (0) | 2023.07.17 |
---|---|
[프로그래머스/SQL] 평균 일일 대여 요금 구하기 (0) | 2023.07.17 |
[프로그래머스/SQL] 조건에 부합하는 중고거래 댓글 조회하기 (1) | 2023.07.16 |
[백준/2292] 벌집 (0) | 2022.11.25 |
[백준/1712] 손익분기점 (Java 11) (0) | 2022.11.21 |