일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Kubernetes
- 머신러닝
- 데이터분석전문가
- bigquery
- 프로그래머스
- 포아송분포
- level 1
- 통계방법론
- 데이터분석준전문가
- gnn
- LLM
- SQLP
- ADsP
- SQL
- 통계학입문
- 언어모델
- nlp
- Level 2
- docker
- 인공지능
- 프레임워크
- MYSQL
- CS224W
- RNN
- MLOps
- Ai
- ML Ops
- 코딩테스트
- SQLD
- 자연어처리
- Today
- Total
코드 깎는 PM
프로그래머스 SQL level 1 - #1 자동차 대여 기록에서 장기/단기 대여 구분하기 본문
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
출처: https://link.coupang.com/a/bqfHaS
2024 이기적 SQL 개발자 이론서+기출문제
COUPANG
www.coupang.com
1. 문제 설명
문제 설명
다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블은 아래와 같은 구조로 되어있으며, HISTORY_ID, CAR_ID, START_DATE, END_DATE 는 각각 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일을 나타냅니다.
Column nameTypeNullableHISTORY_ID | INTEGER | FALSE |
CAR_ID | INTEGER | FALSE |
START_DATE | DATE | FALSE |
END_DATE | DATE | FALSE |
문제
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
예시
예를 들어 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블이 다음과 같다면
HISTORY_IDCAR_IDSTART_DATEEND_DATE1 | 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_IDCAR_IDSTART_DATEEND_DATERENT_TYPE5 | 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 | 장기 대여 |
주의사항
START_DATE와 END_DATE의 경우 예시의 데이트 포맷과 동일해야 정답처리 됩니다.
2. 정답
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,
# start_date와 end date가 동일한 경우도 대여 기간은 1일
case when (DATEDIFF(END_DATE, START_DATE))+1 >= 30 then '장기 대여'
else '단기 대여'
end as RENT_TYPE
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where YEAR(START_DATE) = 2022
and MONTH(START_DATE) = 09
order by HISTORY_ID desc;
3. 코드 설명
- select HISTORY_ID, CAR_ID
- HISTORY_ID, CAR_ID 칼럼 선택
- from CAR_RENTAL_COMPANY_RENTAL_HISTORY
- CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블 선택
- DATE_FORMAT(START_DATE,'%Y-%m-%d') AS START_DAT
- yyyy-mm-dd형태로 Date 형태를 변환
- ORDER BY HISTORY_ID DESC
- HISTORY_ID를 기준으로 내림차순 정렬
- where YEAR(START_DATE) = 2022
and MONTH(START_DATE) = 09- 2022년 고정 and 09월 고정
- case when (DATEDIFF(END_DATE, START_DATE))+1 >= 30 then '장기 대여'
else '단기 대여'
end as RENT_TYPE- 대여 시작일부터 종료일까지의 일자 차이 (+1)이 30일 이상이면 '장기대여'
이외는 '단기대여'
칼럼명은 RENT_TYPE
- 대여 시작일부터 종료일까지의 일자 차이 (+1)이 30일 이상이면 '장기대여'
'코딩 테스트 > SQL (SQLD & SQLP)' 카테고리의 다른 글
프로그래머스 SQL level 5 - #1 상품을 구매한 회원 비율 구하기 (0) | 2023.02.08 |
---|---|
프로그래머스 SQL level 4 - #1 오프라인/온라인 판매 데이터 통합하기 (0) | 2023.02.06 |
프로그래머스 SQL level 2 - #1 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2023.02.06 |
프로그래머스 SQL level 1 - #3 조건에 맞는 도서 리스트 출력하기 (0) | 2023.02.06 |
프로그래머스 SQL level 1 - #2 평균 일일 대여 요금 구하기 (0) | 2023.02.06 |