성능 요약
- 메모리: 0.0 MB, 시간: 0.00 ms
구분
- 코딩테스트 연습 > String, Date
Answer Code1(2023.03.05)
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
문제 풀이 - Answer Code1
-
CAR_RENTAL_COMPANY_RENTAL_HISTORY
테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명 :AVERAGE_DURATION
) 리스트를 출력하는 SQL문을 작성하는 문제였다. -
평균 대여 기간은 소수점 두 번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬하고,
-
평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬한다.
-
[1] 평균 대여 기간 구하기
-
GROUP BY를 사용해 자동차 ID별 평균 대여 기간을 구한다. 이때 DATEDIFF(날짜1, 날짜2) 함수를 사용한다.
날짜1
에는 마지막날,날짜2
에는 시작날을 넣으면 두 날짜간의 차이를 구할 수 있다. 예) 시작일이 2023-03-05, 종료일이 2023-03-09이면 대여 기간은 5일) -
두 날짜간의 차이+1
을 해줘야 총 대여기간이 된다. -
자동차 ID별 대여 기간을 모두 구한 후 AVG함수를 사용해 평균을 구하면 자동차 ID별 평균 대여기간이 된다.
-
-
[2] 평균 대여 기간은 소수점 두 번째 자리에서 반올림한다.
- ROUND 함수를 사용한다. 소수점 두 번째 자리에서 반올림하므로
ROUND(컬럼명, 1)
로 써주면 된다.
- ROUND 함수를 사용한다. 소수점 두 번째 자리에서 반올림하므로
-
[3] 평균 대여 기간이 7일 이상
- AVERAGE_DURATION이 GROUP BY를 통해 구한 값이므로 HAVING절을 사용한다. (HAVING 절은 GROUP BY 절과 함께 사용해야 한다)
-
[4] 정렬
- ORDER BY를 통해 내림차순(DESC)으로 정렬한다.
Review
- 두 날짜간의 차이, 평균 대여 기간 구하는 방법을 이번에 제대로 알게되었다.