해당 문제는 Programmers에서 사용한 문제이며 모든 테이블의 자료와 출처는 Programmers임을 밝힙니다.
해당 글에서는 CASE문과 DATEDIFF를 이용하여 푸는 문제로 초보자가 하기에는 보통 정도의 난이도를 가지고 있는 것 같습니다.
해당 문제 원본을 확인 하시려면 해당 사이트를 들어가시면 될 것 같습니다.
시작하겠습니다.
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
해당 문제는 딱 하나만 기억하면 됩니다.
대여일부터 1일차라 단순히 날짜 차이를 기준으로 하면 29일 이상부터 장기입니다
즉, 1일 부터 30일까지 대여를 한다면 해당 대여일은 30 - 1 = 29가 아닌 1일을 포함한 30일 인 것입니다.
1. WHERE 절을 이용하여 2022년 9월 만 가져오기
SELECT *
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
DATE_FORMAT을 이용하여 start_date가 2022년 09월만 가져오도록 만들어 주었습니다.
2. CASE절과 DATEDIFF를 활용하여 문제 풀기
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 DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
ORDER BY HISTORY_ID DESC
우선 여기서 확인 해야 할 것은 DATEDIFF를 이용하여 end_date와 start_date를 뺀 후 대여한 첫 번째 날도 포함 시키기 위해 1을 더해주었습니다.
해당 계산을 통해 CASE문에 적용하여 문제에서 원하는 컬럼값이 출력되도록 만들어 주었습니다.
이제 조건에 맞게 정렬까지 해주시면 해당 코드는 정답이 됩니다.
이상으로 Programmers 문제 풀이를 마치도록 하겠습니다.
728x90
'Data Analyst > SQL' 카테고리의 다른 글
[SQL] Programmers 문제 풀기(5월 식품들의 총매출 조회하기) (0) | 2024.11.12 |
---|---|
[SQL] Programmers 문제 풀기(상품을 구매한 회원 비율 구하기) (0) | 2024.11.11 |
[SQL] Programmers 문제 풀기(특정 기간동안 대여 가능한 자동차들의 대여비용 구하기) (0) | 2024.11.07 |
[SQL] Programmers 문제 풀기(주문량이 많은 아이스크림들 조회하기) (0) | 2024.11.06 |
[SQL] Programmers 문제 풀기(년, 월, 성별 별 상품 구매 회원 수 구하기) (0) | 2024.11.05 |