정답쿼리
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 |
댓글