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

📍 문제

 

프로그래머스

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

programmers.co.kr

 

📍 풀이

고려해야할 조건들을 살펴보자!

 

1. 평균 대여 기간이 7일 이상인 자동차들

2. 평균 대여 기간은 소수점 두번째 자리에서 반올림

3. 평균 대여 기간 기준 내림차순 정렬

 

이 문제의 핵심은 (나는 이걸 놓쳐서 틀렸다)

1. GROUP BY, HAVING 절, AVG() 활용하여 평균 대여 기간 7일 이상인 자동차들만 가져오기

GROUP BY CAR_ID
HAVING AVG(DATEDIFF(END_DATE,START_DATE) + 1) >= 7

 

2. ROUND 활용하여 평균 대여 기간 소수점 두번째 자리에서 반올림

SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE,START_DATE)+1), 1) AS AVERAGE_DURATION

 

3. ORDER BY 활용하여 평균 대여 기간 기준 내림차순 정렬

ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC

 

 

이렇게 해서 잘 쓴 것 같았지만,,,, 틀렸다...

 

 틀린 코드 

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

 

그 이유는

총 대여 기간 : 날짜 간의 차이 + 1

 

쩝,,,

 

📍 전체 정답 코드

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

+ Recent posts