TIL

2024-09-25

여연찌 2024. 9. 25. 21:31
  • Today

코드카타

 


  • Today I Learned

 

SQL

 

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.

 

 

잘못된 답이 나왔던 쿼리...

SELECT history_id
     , car_id
     , date_format(start_date, '%Y-%m-%d') start_date
     , date_format(end_date, '%Y-%m-%d') end_date
     , case when datediff('end_date','start_date')>=30 then '장기 대여' else '단기 대여' end RENT_TYPE
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where start_date like '2022-09%'
order by 1 desc;

 

실행 결과 모두가 다 단기 대여만 나오길래 뭔가 이상하다고 생각했다...

 

# 수정한 쿼리

SELECT HISTORY_ID
     , CAR_ID
     , date_format(start_date, '%Y-%m-%d') START_DATE
     , date_format(end_date, '%Y-%m-%d') END_DATE
     , case when datediff(end_date,start_date)>=29 then '장기 대여' else '단기 대여' end RENT_TYPE
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where start_date like '2022-09%'
order by HISTORY_ID desc;

 

다른 쿼리들도 살펴봤는데 우선 29일 ,30 일이 문제였다.

대여한 날 당일에 반납한 경우도 있기 때문에 29일로 변경해주었어야했고

아니면 1일로 칠 수 있도록 +1 을 해주어야 했다.

그리고 datediff 에 '' 를 넣은게 문제였음 ... 

 

'' 안에 작성할 경우 문자열로 해석이 되기 때문에 다른 답이 나온다...

컬럼이기 때문에 꼭 '' 를 빼고 작성해야함!!

 

 

 

'TIL' 카테고리의 다른 글

2024-09-30  (1) 2024.09.30
2024-09-26  (1) 2024.09.26
2024-09-24  (1) 2024.09.24
2024-09-23  (0) 2024.09.23
2024-09-05  (1) 2024.09.05