02/06 SQL 문제풀이

Data Architect / Engineer·2024년 2월 6일
1

1일_1SQL

목록 보기
26/63
post-thumbnail

문제

  • 프로그래머스 SQL 문제
  • 자동차 대여 기록에서 장기/단기 대여 구분하기 / 레벨 1
  • 문제 내용 : 하단 프로그래머스 문제 [링크]


내가 작성한 Query

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 BETWEEN '2022-09-01' AND '2022-09-30'
ORDER BY HISTORY_ID DESC;
  • '2022-09'에 해당하는 데이터만 대상이 되므로, WHERE절 이용하여 9월 데이터만 추출

  • SELECT 절에서 START_DATE, END_DATE 컬럼을 '연-월-일' 형식으로 출력하기 위해 DATE_FORMAT(일자, '%Y-%m-%d') 함수 사용

  • DATEDIFF 함수 사용하여, END_DATESTART_DATE의 일수 차이에 1을 더한 값을 구해줌. (START_DATE, END_DATE 양쪽 값들도 모두 포함해야 하므로 1을 더한 값을 구함)

  • 위에서 구한 값이 30 이상이면 '장기 대여', 그 외에는 '단기대여' 이므로 CASE WHEN THEN 사용하여 데이터 출력

  • ORDER BY 사용하여 HISTORY_ID기준으로 내림차순 정렬
    - 🌟🌟DATEDIFF 일수 계산 시 범위 양 끝 포함하려면 +1 해주는거 주의!

profile
질문은 계속돼 아오에

0개의 댓글