728x90
회사에서 심심해서 프로그래머스 들어갔는데 SQL 문제가 새로 올라와서 풀었다 !!!
아주 따끈따끈한 문제 풀이입니당
문제
https://school.programmers.co.kr/learn/courses/30/lessons/157342
풀이
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