CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성해주세요. 평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬해주세요.
-- SOL 1:subquery 활용
SELECT *
FROM (
SELECT CAR_ID, ROUND(AVG(END_DATE-START_DATE+1),1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC )
WHERE AVERAGE_DURATION>=7
-- SOL 2:having절 사용
-- POINT) SELECT절에서 생성한 컬럼을 GROUP BY, WHERE, HAVING절에서 쓸 수 없는 이유
-- : 실행순서가 WHERE > GROUP BY > HAVING > SELECT 순이기 때문
SELECT
CAR_ID
, ROUND(AVG(END_DATE-START_DATE+1),1) DIFF
FROM
CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY
CAR_ID
HAVING
ROUND(AVG(END_DATE-START_DATE+1),1) >= 7
ORDER BY 2 DESC, 1 DESC
-- SOL 3. CTE를 활용해 가독성을 높인 코드
WITH T_A AS (
SELECT CAR_ID, ROUND(AVG(END_DATE-START_DATE+1),1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC
)
SELECT *
FROM T_A
WHERE AVERAGE_DURATION>=7