- 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 |