정답쿼리
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 AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC
설명
날짜 차이를 어떻게 계산해야하는지 알아야 풀 수 있는 문제였다.
ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1)
DATEDIFF(시작 날짜, 마지막 날짜)
DATDIFF라는 함수에 시작 날짜와 마지막 날짜에 해당하는 Column을 넣어주면, 두 날짜간의 차이를 구할 수 있다. 여기에 +1을 해준 이유는 대여기간에 마지막 날짜까지 포함해야하기 때문에이다. 예를 들어 10월 1일 부터 10월 3일까지 대여 했다고 하면, DATEDIFF는 2이지만, 우리가 구하려고 하는 대여기간은 3이다.
여기까지 작업을 마쳤으면, car_id를 GROUP BY로 묶어주고, 위 함수를 AVG로 계산하면, car_id에 따른 평균 대여기간을 구할 수 있다.
HAVING AVERAGE_DURATION >= 7
문제에서는 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간을 출력하라고 했으니, HAVING절을 통해 평균 대여기간이 7일 이상인 자동차를 조건으로 걸어준다.
마지막으로 ORDER BY로 정렬해주면 끝난다.
'코딩테스트 > SQL 코테' 카테고리의 다른 글
[프로그래머스 SQL]조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2023.08.08 |
---|---|
[프로그래머스 SQL] 오랜 기간 보호한 동물(2) (0) | 2023.08.07 |
[프로그래머스 SQL] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2023.08.03 |
[프로그래머스 SQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2023.07.31 |
[프로그래머스 SQL] 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2023.07.27 |
댓글