일단 시작을 이렇게 해놓고 생각하기
SELECT HISTORY_ID, CAR_ID, START_DATE, END_DATE, RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
ORDER BY HISTORY_ID DESC;
✅대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 찾기
WHERE START_DATE LIKE '2022-09%'
여기까지 해서 다시 짜봄
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, RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC;
✅날짜 사이의 기간을 구하기
DATEDIFF(HOUR, '2022-09-01', '2022-10-01') //시간 차이
DATEDIFF(DAY, '2022-09-01', '2022-10-01') //일 차이
DATEDIFF(END_DATE, START_DATE) >= 29 //29일 차이
✅30일 이상이면 장기대여, 그렇지 않으면 단기대여로 분류하기
IF, ELSE 처리를 해야하는 것 같은데 SQL에서 어떻게 작성하는지 찾아본다!
CASE
WHEN 조건1 THEN '조건1 반환값'
WHEN 조건2 THEN '조건2 반환값'
ELSE '충족되는 조건 없을 때 반환값'
END
CASE
WHEN DATEDIFF(END_DATE, START_DATE) >= 29 THEN '장기 대여'
ELSE '단기 대여'
END AS RENT_TYPE //반환값
RENT_TYPE은 반환값으로 들어가니까 SELECT에 쓰면 안됐었다! 수정...
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(START_DATE, END_DATE) >= 29 THEN '장기대여'
ELSE '단기대여'
END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC;
이렇게 했는데 틀려서 다시 찾아보기로 한다
다른사람 풀이
IF문
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
728x90
'Dev. > SQL' 카테고리의 다른 글
[SQL] 흉부외과 또는 일반외과 의사 목록 출력하기 (0) | 2024.03.20 |
---|---|
[SQL] 조건에 맞는 도서 리스트 출력하기 (0) | 2024.03.20 |
[프로그래머스]GROUP BY : 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2023.11.14 |
[프로그래머스 SQL] SELECT 12세 이하인 여자 환자 목록 출력하기 (1) | 2023.10.30 |
[프로그래머스 SQL] SELECT 오프라인/온라인 판매 데이터 통합하기 (0) | 2023.09.23 |
댓글