본문 바로가기
DBMS

[프로그래머스 SQL] Lv. 2 자동차 평균 대여 기간 구하기

by floral1215 2025. 6. 14.
반응형

※ 문제

 

※ 코드

/*
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    AVERAGE_DURATION DESC, CAR_ID DESC;
*/

SELECT      CAR_ID, ROUND(AVG(DURATION), 1) AVERAGE_DURATION
FROM        (SELECT CAR_ID, DATEDIFF(END_DATE, START_DATE)+1 DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY) NEW_TB
GROUP BY    CAR_ID
HAVING      AVERAGE_DURATION >= 7
ORDER BY    AVERAGE_DURATION DESC, CAR_ID DESC;

 

※ 풀이

위는 SUB QEURY 없이 푸는 방법, 아래는 SUB QEURY를 사용하여 푸는 방법입니다.

지금 문제는 간단하기도 하고, 효율성을 생각하면 위 코드가 좋겠지만... 조금 더 복잡해지면 약간의 효율성을 포기하고 아래처럼 인간 친화적으로 작성하는 게 더 좋지 않을까 싶습니다.

 

그리고 HAVING 조건절에서 ROUND 처리가 안 되면 정답이 틀리다고 나옵니다. 아마 6.95~6.99 사이의 실수값 때문이라고 생각되네요. (ROUND를 하라는 게 문제의 조건이고 6.95~6.99는 반올림 시 7일이므로 출력이 되어야 하는 CAR_ID 입니다!)

 

아무튼 이 문제의 포인트는 DATEDIFF 함수를 통해 대여시작~대여종료까지의 날짜를 일 단위로 구해주는 것입니다.

그리고 대여 당일부터 1일로 치기 때문에(즉, 당일대여는 대여기간 = 1일) DATEDIFF의 결과값에 +1을 해주어야 합니다.

 

반응형