코딩테스트/프로그래머스

[프로그래머스]자동차 평균 대여 기간 구하기 - MySQL

GAEBAL 2023. 2. 9. 14:58
728x90

회사에서 심심해서 프로그래머스 들어갔는데 SQL 문제가 새로 올라와서 풀었다 !!!

아주 따끈따끈한 문제 풀이입니당

 

문제

https://school.programmers.co.kr/learn/courses/30/lessons/157342

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이

Level 2 문제인데 Level 2 문제치고 쉽지만은 않은 문제였다 !

 

💡 ROUND()를 이용해서 반올림 하기 !
첫번째 인자에는 값을, 두번째 인자에는 소수점 몇번째 자리에서 반올림할 것인지를 써주면 됨
💡 AVG()를 이용해서 평균 구하기 !
💡 GROUP BY절 잘 사용하기 !
어떤 컬럼을 기준으로 그루핑을 할지, 잘 생각하여서 결정하여야 한다. 이 문제에서는 자동차들의 평균 대여 기간을 구해야하므로 CAR_ID로 그루핑을 함
💡 HAVING절 잘 사용하기 !
평균 대여 기간이 7일 이상인 자동차들을 걸러내어야 하는데, 평균을 구할 때 사용하는 집계 함수인 AVG()는 WHERE절에서 사용이 불가능하다. 따라서, HAVING절에서 AVG()를 사용해야 한다 !

 

아 또 하나

💡 대여기간 잘 이해하기 !
오늘 대여해서 오늘 반납하는 것도 1일임 !!! 내 풀이처럼 DATEDIFF()를 사용할 경우, DATEDIFF(오늘, 오늘)은 0이 나옴 !
그렇기 때문에 + 1 을 해준 것 !

 

 

코드

-- ROUND()
-- AVG()
-- GROUP BY
-- HAVING
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
728x90