devFancy BE Developer

[Programmers] 157342. 자동차 평균 대여 기간 구하기(Lv.2) (String, Date)

2023-03-05
devFancy
SQL

문제 링크

성능 요약

  • 메모리: 0.0 MB, 시간: 0.00 ms

구분

  • 코딩테스트 연습 > String, Date

Answer Code1(2023.03.05)

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 AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC

문제 풀이 - Answer Code1

  • CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명 : AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성하는 문제였다.

  • 평균 대여 기간은 소수점 두 번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬하고,

  • 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬한다.

  • [1] 평균 대여 기간 구하기

    • GROUP BY를 사용해 자동차 ID별 평균 대여 기간을 구한다. 이때 DATEDIFF(날짜1, 날짜2) 함수를 사용한다. 날짜1에는 마지막날, 날짜2에는 시작날을 넣으면 두 날짜간의 차이를 구할 수 있다. 예) 시작일이 2023-03-05, 종료일이 2023-03-09이면 대여 기간은 5일)

    • 두 날짜간의 차이+1 을 해줘야 총 대여기간이 된다.

    • 자동차 ID별 대여 기간을 모두 구한 후 AVG함수를 사용해 평균을 구하면 자동차 ID별 평균 대여기간이 된다.

  • [2] 평균 대여 기간은 소수점 두 번째 자리에서 반올림한다.

    • ROUND 함수를 사용한다. 소수점 두 번째 자리에서 반올림하므로 ROUND(컬럼명, 1) 로 써주면 된다.
  • [3] 평균 대여 기간이 7일 이상

    • AVERAGE_DURATION이 GROUP BY를 통해 구한 값이므로 HAVING절을 사용한다. (HAVING 절은 GROUP BY 절과 함께 사용해야 한다)
  • [4] 정렬

    • ORDER BY를 통해 내림차순(DESC)으로 정렬한다.

Review

  • 두 날짜간의 차이, 평균 대여 기간 구하는 방법을 이번에 제대로 알게되었다.

Reference


Comments

Index