[프로그래머스] SQL 고득점 kit(자동차 대여 기록에서 장기/단기 대여 구분하기)

728x90

1. 자동차 대여 기록에서 장기/단기 대여 구분하기

 

문제

 

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 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,
    CASE
        WHEN (START_DATE LIKE '2022-09%') AND (DATEDIFF(END_DATE, START_DATE)+1 >= 30) THEN '장기 대여'
        ELSE '단기 대여'
    END AS RENT_TYPE
FROM 
    CAR_RENTAL_COMPANY_RENTAL_HISTORY
ORDER BY 
    HISTORY_ID 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) + 1 >= 30 THEN '장기 대여' 
        ELSE '단기 대여' 
      END RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE  '2022-09%'
ORDER BY HISTORY_ID DESC;

 

CASE WHEN THEN

https://jyeong0814.tistory.com/15

 

[혼자 공부하는 SQL] 4-3

4-3 SQL 프로그래밍 스토어드 프로시저: MySQL에서 프로그래밍 기능이 필요할 때 사용하는 데이터베이스 개체 # 스토어드 프로시저 형식 DEELIMITER $$ CREATE PROCEDURE 스토어드_프로시저_이름() BEGIN # 이

jyeong0814.tistory.com

 

DATEDIFF 함수:

  • DATEDIFF() 함수는 두 날짜 간의 차이를 계산하는 데 사용된다.
  • 일반적인 구문은 DATEDIFF(unit, start_date, end_date)이며, unit은 날짜 차이의 단위(일, 주, 월 등), start_date와 end_date는 비교할 두 날짜이다.
  • unit을 생략하면 기본적으로 일(day) 단위로 차이를 계산한다.
  • 예를 들어, DATEDIFF(DAY, '2022-01-01', '2022-01-10')은 '2022-01-01'과 '2022-01-10' 사이의 일 수를 반환한다.

 

DATE_FORMAT 함수 정리

https://jyeong0814.tistory.com/41

 

[프로그래머스] SQL 고득점 kit (동명 동물 수 찾기, DATETIME에서 DATE로 형 변환)

1. 동명 동물 수 찾기 문제 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외

jyeong0814.tistory.com

 

728x90