Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- python
- 물만날물고기
- pandas
- 물 만날 물고기
- SQL
- leetcode
- 나임
- sorted()
- colab
- 데이터프레임
- KNIME 데이터 분석
- 리스트
- 해커랭크
- sklearn
- 태블로
- 데이터분석솔루션
- power-bi
- DB
- 코랩
- Tableau
- MYSQL
- 파이썬
- Revising the Select Query II
- 판다스
- pyinstaller
- 프로그래머스
- KNIME
- HackerRank
- 코딩테스트
- 텐서플로우
Archives
- Today
- Total
물 만날 물고기
[프로그래머스/SQL] - (13) 자동차 대여 기록에서 장기/단기 대여 구분하기 본문
🔍 예상 검색어
더보기
# 프로그래머스
# SQL
# 자동차 대여 기록에서 장기/단기 대여 구분하기
해당 포스팅은 프로그래머스 SQL "자동차 대여 기록에서 장기/단기 대여 구분하기" 문제에 대한 풀이를 정리하였습니다.
▶ 문제
코딩테스트 연습 - 자동차 대여 기록에서 장기/단기 대여 구분하기 | 프로그래머스 스쿨
▶ 내 정답
-- 코드를 입력하세요
-- 문제 조건 적용 체크하면서 진행
-- CAR_RENTAL_COMPANY_RENTAL_HISTORY
-- HISTORY_ID, CAR_ID, START_DATE, END_DATE
/* 문제조건
(1) 대여 시작일이 2022년 9월에 속하는 대여 기록
(2) 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시 => 컬럼명: RENT_TYPE을 추가
(3) 대여 기록 ID를 기준으로 내림차순 정렬
(주의사항) START_DATE와 END_DATE의 경우 예시의 데이트 포맷과 동일
*/
-- 결과 테이블 : HISTORY_ID, CAR_ID, START_DATE, END_DATE, RENT_TYPE(+NEW)
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 -- (2)
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" -- (1)
ORDER BY HISTORY_ID DESC -- (3)
▶ 다른 사람 정답 (1)
/*
목적 : 자동차 대여 기록에서 장기/단기 대여 구분하기
아웃풋 : 대여 기록 ID,RENT_TYPE
조건
1.대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서
2.대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)
3.대여 기록 ID를 기준으로 내림차순 정렬
*/
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 >= '2022-09-01 00:00:00' AND start_date < '2022-10-01 00:00:00'
ORDER BY history_id DESC
내 정답과 비슷하지만 where절에서 time stamp 형식 + 수기로 직접 입력한 부분은 조금 아쉬어 보인다.
▶ 다른 사람 정답 (2)
select
history_id,
car_id,
date_format(start_date, '%Y-%m-%d') start_date,
date_format(end_date, '%Y-%m-%d') end_date,
IF (timestampdiff(day, start_date, end_date) < 29, '단기 대여', '장기 대여') rent_type
from
car_rental_company_rental_history
where
date_format(start_date, '%Y%m')='202209'
order by
1 desc
이분은 기준일을 30일이 아닌 30-1일로 주었고, "단기대여"와 "장기대여"만 있다는 것을 고려해서 IF문으로 처리하는 방법을 사용한 것으로 확인하였다.
▶ 다른 사람 정답(3)
-- 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY
SELECT
*,
CASE
WHEN (MONTH(start_date) = MONTH(END_DATE)) AND (RIGHT(END_DATE, 2) - RIGHT(start_date, 2) >= 29) THEN '장기 대여'
WHEN (MONTH(END_DATE) = 10) AND (30-RIGHT(start_date, 2)+RIGHT(END_DATE, 2)>=29) THEN '장기 대여'
WHEN MONTH(END_DATE) > 10 THEN '장기 대여'
WHEN YEAR(END_DATE) >= 2023 THEN '장기 대여'
ELSE '단기 대여' END AS RENT_TYPE
FROM
(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
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(start_date, '%Y-%m') = '2022-09') T1
ORDER BY HISTORY_ID DESC
▼ 참고자료
No. | 내용 | 비고 |
1 | my sql 정답 | 프로그래머스 스쿨 | 김병윤2023.5.5 17:41 |
2 | mysql 정답 공유! | 프로그래머스 스쿨 | 김민우2023.2.10 02:08 |
3 | 다소 긴 버전 정답(MySQL) | 프로그래머스 스쿨 | herb2023.2.10 11:11 |
▼ 복습/히스토리
더보기
No. | 복습일 | 비고 |
1 | ||
2 | ||
3 | ||
4 | ||
5 |
- 작성코드
--
'DB & SQL > 프로그래머스' 카테고리의 다른 글
[프로그래머스/SQL] - (15) 평균 일일 대여 요금 구하기SELECT (0) | 2023.06.25 |
---|---|
[프로그래머스/SQL] - (16) 저자 별 카테고리 별 매출액 집계하기 GROUP BY (0) | 2023.06.25 |
[프로그래머스/SQL] - (5) 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2023.06.23 |
[프로그래머스/SQL] - (76) 모든 레코드 조회하기 (0) | 2023.06.23 |
[프로그래머스/SQL] - (40) 3월에 태어난 여성 회원 목록 출력하기 (0) | 2023.06.23 |