250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Archives
Today
Total
관리 메뉴

데이터 놀이터

String, Date - 자동차 대여 기록에서 장기/단기 대여 구분하기 본문

SQL

String, Date - 자동차 대여 기록에서 장기/단기 대여 구분하기

jjjk84 2023. 8. 24. 22:54
728x90

1. 문제

 

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서

대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서

대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여

대여기록을 출력하는 SQL문을 작성해주세요.

결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.

https://school.programmers.co.kr/learn/courses/30/lessons/151138

 

2. 문제 조건

 

  1. 대여 시작일이 2022년 9월에 속하는 대여 기록 -> WHERE 조건
  2. 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가-> CASE 또는 IF
  3.  대여 기록 ID를 기준으로 내림차순 정렬 -> ORDER BY

 

3. 코드 작성

 

/*
1. 대여 시작일이 2022년 9월
2. 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가
3. 대여기록 출력
4. 대여 기록 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
     , IF(DATEDIFF(END_DATE, START_DATE) + 1 >= 30, '장기 대여', '단기 대여') AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
ORDER BY HISTORY_ID DESC;

 

4. 회고

 

  • 조건문을 사용하는 경우에 CASE 대신에 IF를 사용해보았다. 다른 사람들의 풀이를 참고했을때 IF 문을 사용했을때 더 코드가 간결해보였기 때문이다.
    • IF(조건, 조건이 참인 경우 출력, 거짓인 경우 출력)
    • IF문 안에 IF를 넣으면서 다중 조건을 걸 수도 있다.
  • 기간 계산을 하는 경우에 사용하는 DATEDIFF 함수를 복습해보았다. 기간 계산할 때, 항상 + 1을 해주어야 한다는 걸 잊으면 안된다.
728x90