본문 바로가기
PS/SQL

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

by nyrimmm 2024. 6. 9.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 설명

  • Lv 2 문제
  • 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID평균 대여 기간(컬럼명:AVERAGE_DURATION) 리스트를 출력
  • 평균 대여 기간은 소수점 두번째 자리에서 반올림
  • 결과는 평균 대여 기간을 기준으로 내림차순 정렬, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬

 

 

 

문제 풀이

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;

 

◼️ CAR_ID 칼럼으로 그룹화

    -  CAR_ID 칼럼으로 그룹화한 후, CAR_ID(자동차 대여 기록 ID)별로 평균 대여 기간이 7일 이상인 그룹만 추출

    -  이 때, DATEDIFF 함수로 두 날짜 간의 차이를 구한다.

    -  (두 날짜 간 차이) + 1 을 해줘야 총 대여기간이 된다.
       (ex. 시작일이 2024-06-09, 종료일이 2024-06-09이면 총 대여기간은 1일)

    -  AVG 함수로 대여 기간의 평균을 구한다.

 

◼️ ROUND 함수로 AVERAGE_DURATION(평균 대여 기간)을 소수점 두 번째 자리에서 반올림

 

◼️ ORDER BY 로 평균 대여 기간 기준 내림차순, 자동차 ID 기준 내림차순으로 정렬

 

 

 

 

✔️실패한 풀이

이렇게 하면 평균 대여 기간이 아닌 그냥 대여 기간이 7일 이상인 자동차 대여 기록 정보를 가지고,  자동차 대여 기록 ID 별 평균 대여 기간을 출력하게 된다.

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

 

또한 처음에 두 날짜 간의 차이를 구하기 위해서 END_DATE - START_DATE 를 했었는데,  날짜가 아닌 하나의 숫자로 인식을 하고 계산이 되는 것 같다.