[SQL 문제 풀이] 자동차 평균 대여 기간 구하기

프로그래머스 (157342)
Stupefyee's avatar
Mar 14, 2025
[SQL 문제 풀이] 자동차 평균 대여 기간 구하기
notion image
 

내가 작성한 쿼리

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 ;

차이점

  1. 날짜 계산 방식
    1. 오라클: END_DATE - START_DATE + 1로 대여 기간을 계산 대여일을 포함하기 위해 +1
    2. MySQL: DATEDIFF(END_DATE, START_DATE) + 1로 대여 기간을 계산 두 날짜의 차이를 일 단위로 반환하는 함수, 대여일을 포함하기 위해 +1
  1. 평균 대여 기간 계산 및 반올림
    1. 오라클
      1. ROUND(AVG(END_DATE - START_DATE + 1), 1)로 평균 대여 기간을 계산하고 소수점 첫째 자리까지 반올림
      2. TO_CHAR를 사용하여 결과를 문자열 형식으로 변환 FM9990.0: 숫자 값을 특정 형식으로 변환할 때 사용되는 형식 모델
        1. FM: 숫자의 앞에 공백을 채우지 않도록 함
        2. 9990: * 숫자 자리 표시자 * 숫자의 각 자리에 해당하는 숫자들이 어떻게 표시될지를 결정 * 9는 숫자가 있을 경우 자리를 차지하고, 자리가 비어 있으면 빈 자리를 표시하지 않음을 의미
        3. .0: 소수점 이하 한 자리를 나타내는 자리 표시자
    2. MySQL
      1. ROUND(AVG(DATEDIFF(END_DATE,START_DATE)+1), 1)로 평균을 구한 후 소수점 첫째 자리까지 반올림
      2. 문자열 형식으로 변환하지 않고 숫자 형식 그대로 반환
 
Share article

stupefyee