Contents
내가 작성한 쿼리
내가 작성한 쿼리
Oracle
SELECT
CAR_ID,
TO_CHAR(ROUND(AVG(END_DATE - START_DATE + 1), 1), 'FM9990.0') AS AVERAGE_DURATION -- 대여 기간의 평균을 계산하고 소수점 첫째 자리로 반올림 후, 문자열 형식으로 변환
FROM
CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY
CAR_ID -- 차량별로 그룹화
HAVING
AVG(END_DATE - START_DATE + 1) >= 7 -- 대여 기간의 평균이 7일 이상인 차량만 필터링
ORDER BY
ROUND(AVG(END_DATE - START_DATE + 1), 1) DESC,
CAR_ID DESC
;
MySQL
SELECT
CAR_ID,
ROUND(AVG(DATEDIFF(END_DATE,START_DATE)+1),1) AVERAGE_DURATION
FROM
CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY
CAR_ID
HAVING
AVERAGE_DURATION >= 7
ORDER BY
2 DESC,
1 DESC
;
차이점
- 날짜 계산 방식
- 오라클:
END_DATE - START_DATE + 1
로 대여 기간을 계산 대여일을 포함하기 위해+1
- MySQL:
DATEDIFF(END_DATE, START_DATE) + 1
로 대여 기간을 계산 두 날짜의 차이를 일 단위로 반환하는 함수, 대여일을 포함하기 위해+1
- 평균 대여 기간 계산 및 반올림
- 오라클
ROUND(AVG(END_DATE - START_DATE + 1), 1)
로 평균 대여 기간을 계산하고 소수점 첫째 자리까지 반올림TO_CHAR
를 사용하여 결과를 문자열 형식으로 변환FM9990.0
: 숫자 값을 특정 형식으로 변환할 때 사용되는 형식 모델FM
: 숫자의 앞에 공백을 채우지 않도록 함9990
: * 숫자 자리 표시자 * 숫자의 각 자리에 해당하는 숫자들이 어떻게 표시될지를 결정 *9
는 숫자가 있을 경우 자리를 차지하고, 자리가 비어 있으면 빈 자리를 표시하지 않음을 의미.0
: 소수점 이하 한 자리를 나타내는 자리 표시자- MySQL
ROUND(AVG(DATEDIFF(END_DATE,START_DATE)+1), 1)
로 평균을 구한 후 소수점 첫째 자리까지 반올림- 문자열 형식으로 변환하지 않고 숫자 형식 그대로 반환
Share article