inblog logo
|
silver
    SQL문제풀기

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

    silver's avatar
    silver
    Jan 20, 2025
    [SQL문제풀기] 자동차 평균 대여 기간 구하기
    Contents
    문제MYSQLORACLE

    문제

    school.programmers.co.kr
    https://school.programmers.co.kr/learn/courses/30/lessons/157342

    MYSQL

    내가 작성한 오답

    : END_DATE - START_DATE 를 하면 하루 빌린 것들도 0으로 나오는 것처럼 날짜들이 전체적으로 하루 부족하게 나온다.
    SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE,START_DATE)),1) AVERAGE_DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY 1 HAVING AVG(DATEDIFF(END_DATE,START_DATE)) >= 7 ORDER BY 2 DESC, CAR_ID DESC
    notion image

    내가 작성한 정답

    SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE,START_DATE)+1),1) AVERAGE_DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY 1 HAVING AVG(DATEDIFF(END_DATE,START_DATE)+1) >= 7 ORDER BY 2 DESC, CAR_ID DESC
    💡
    DATEDIFF(종료일, 시작일) → [종료일-시작일]을 계산해준다.
     

    ORACLE

    내가 작성한 오답

    : average_duration을 소수점 두번째 자리에서 반올림하라고 했기 때문에 소숫점 첫째자리까지는 무조건 출력되어야 했다.
    SELECT CAR_ID, ROUND(AVG((END_DATE-START_DATE)+1),1) AVERAGE_DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY CAR_ID HAVING ROUND(AVG((END_DATE-START_DATE)+1),1) >= 7 ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC
    notion image
     
    notion image

    내가 작성한 정답

    SELECT CAR_ID, TO_CHAR(ROUND(AVG(END_DATE - START_DATE)+1, 1), 'FM999.0') 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;
    💡
    'FM9999999990.0' 형식은 정수 부분이 없을 경우에도 소수점 이하 한 자리인 .0을 항상 표시하게 해준다. TO_CHAR로 'FM9999999990.0'형식으로 변환해준다. → 이 때 FM은 fill mode로 숫자 형식을 지정할 때 불필요한 공백을 제거하도록 지시한다. 즉, 숫자의 자릿수가 부족할 때 공백 대신 실제 숫자를 출력하게 된다. → 이렇게 변환된 'FM9999999990.0'는 문자열 형식이되기 때문에 order by에 그대로 적용할 수 없다.
    notion image
    → 공백을 제거하지 않았기 때문에 FM을 작성하지 않으면 오답처리가 된다.
     
    Share article

    silver

    RSS·Powered by Inblog