다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블은 아래와 같은 구조로 되어있으며, HISTORY_ID, CAR_ID, START_DATE, END_DATE 는 각각 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일을 나타냅니다.
🔖 예시
❓ 문제
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성해주세요. 평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬해주세요.
🎯 풀이
1) MySQL
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 2 DESC, 1 DESC;
🍀 DATEDIFF(A, B) : 날짜 A 와 날짜 B 의 일 수 차이
=> 날짜A 와 날짜B 가 서로 같을 경우 차이가 0으로 출력되기 때문에 +1 을 해 주었다.
⭐ TIMESTAMPDIFF(구분자, A, B)
=> 구분자 : yy(년도), qq(분기), mm(월), dd(일), m(시간), mi(분), ss(초) 등 단위 설정 가능
🍀AVG() : 평균 구하는 함수
🍀Round() : 반올림 구하는 함수
2) Oracle
SELECT CAR_ID,
ROUND(AVG(END_DATE - START_DATE+1),1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING ROUND(AVG(END_DATE - START_DATE+1),1) >= 7
ORDER BY ROUND(AVG(END_DATE - START_DATE+1),1) DESC, CAR_ID DESC;