inblog logo
|
miniiya
    프로그래머스MySQL코딩테스트

    [프로그래머스/MySQL] 자동차 평균 대여 기간 구하기(개념 및 정답)

    DATEDIFF, ROUND, 서브쿼리(또는 HAVING)
    Seo Jimin's avatar
    Seo Jimin
    Mar 17, 2026
    [프로그래머스/MySQL] 자동차 평균 대여 기간 구하기(개념 및 정답)
    Contents
    문제 링크개념DATEDIFFROUND서브쿼리제출 답안

    문제 링크

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

    개념

    DATEDIFF

    DATEDIFF 함수에 끝나는 날짜와 시작 날짜를 넣으면 두 날짜의 차를 계산해준다.
    DATEDIFF(END_DATE, START_DATE)
    하지만 위 DATEDIFF 함수는 말 그대로 날짜의 차를 계산해주는데, 문제를 보면 대여 당일도 포함하고 있어서 +1을 붙여줘야 한다.
    DATEDIFF(END_DATE, START_DATE)+1

    ROUND

    ROUND 함수를 사용하면 반올림해서 소수점 몇 번째 자리까지 나타낼지 정할 수 있다. 예를 들어 첫째 자리까지 나타낸다 한다면 소수점 둘째 자리에서 반올림 시켜준다.
    ROUND(5/3,1)

    서브쿼리

    서브쿼리를 활용하면 서브쿼리의 결과를 기반으로 데이터 필터링, 검색, 조작 등에 유용하게 사용할 수 있다. 형태는 SELECT, FROM, WHERE 등에 ()를 사용하여 그 안에 쿼리문을 작성하면 된다.
    # WHERE절에 서브 쿼리를 사용한 예시 SELECT * FROM TABLE_EXAMPLE1 WHERE MEM_ID IN (SELECT MEM_ID FROM TABLE_EXAMPLE2 WHERE LOCATION = '부산');
    💡
    사실 HAVING을 사용하면 더 간단하게 작성 가능하다ㅎㅎ
     

    제출 답안

    SELECT T.CAR_ID, T.AVERAGE_DURATION FROM ( 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 ) T WHERE T.AVERAGE_DURATION >= 7 ORDER BY T.AVERAGE_DURATION DESC, T.CAR_ID DESC;
     
    # HAVING절을 사용했을 때의 답 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 AVG(DATEDIFF(END_DATE, START_DATE)+1) >= 7 ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
    Share article
    Contents
    문제 링크개념DATEDIFFROUND서브쿼리제출 답안

    miniiya

    RSS·Powered by Inblog