반응형
반응형

출저 : 프로그래머스

 

 

String, date

문제풀이

 

A. DATEDIFF, CASE, DATE_FORMAT 사용

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(END_DATE, START_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

 

※ DATEDIFF(날짜1, 날짜2) : 날짜1 - 날짜2(일수만 계산)

→ 문제는 대여일 계산이므로 첫날도 포함해야함 따라서 +1을 추가로 넣어줘야함 

※ DATE_FROMAT(컬럼명, '%Y-%m-%d ) : 날짜타입변경

※ CASE WHEN 조건 THEN 결과 ......  (1)

WHEN 조건 THEN 결과 ......  (2) 반복될경우 추가

ELSE 결과 END  

 

 

 

 

틀렸던 오답

'장기 대여', '단기 대여' 를 '장기대여', '단기대여' 처럼 띄어쓰기를 안함....

반응형
반응형

출저 : 프로그래머스

 

 

String, date

문제풀이

 

A. DATEDIFF 사용

SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE,START_DATE)+1), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
GROUP BY CAR_ID
HAVING AVG(DATEDIFF(END_DATE,START_DATE)+1) >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC

 

※ DATEDIFF(날짜1, 날짜2) : 날짜1 - 날짜2(일수만 계산)

→ 문제는 대여일 계산이므로 첫날도 포함해야함 따라서 +1을 추가로 넣어줘야함 

 

 

 

 

틀렸던 오답

SELECT CAR_ID, ROUND(AVG(END_DATE - START_DATE+1), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
GROUP BY CAR_ID
HAVING AVG(END_DATE - START_DATE+1) >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC

 

→  틀린이유 : 위에 답은 일수가아닌 숫자로 취급해서 계산함,

                       예를들어 END_DATE = 2024.04.05, START_DATE = 2024.01.05 면 

                       20240405 - 20240105  = 300 이 출력됨. 그래서 오답

 

반응형

+ Recent posts

// 기업0 D-Day (표지) // 기업1 D-Day