본문 바로가기
문제풀이/SQL(My sql)

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

by kime2 2024. 1. 26.
출처

 

문제

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성해주세요. 평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬해주세요.

문제에 대한 해석

-- 조건: 평균 대여 기간이 7일 이상
-- 조회: 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 
-- 출력: 평균 대여 기간은 소수점 두번째 자리에서 반올림
-- 정렬: 대여기간 내림차순, id내림차순

 

풀이(MYSQL)

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 2 desc, 1 desc

 

작동순서

💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환

  1. FROM 절: CAR_RENTAL_COMPANY_RENTAL_HISTORY테이블에서 
  2. GROUP BY 절: car_id별로 그룹화하여 end_date,start_date날짜의 차+1에 대해 평균을 구한다
  3. HAVING 절: car_id별로 두 날짜의 차 +1의 평균이 7 이상일 경우 필터링 하여 
  4. SELECT 절: car_id와 car_id별로 그룹화하여 end_date,start_date날짜의 차+1에 대한 평균을 2자에에서 반올림한 수를  AVERAGE_DURATION 컬럼에 조회(대여 시작일과 반납일의 차에서 +1을 하는 이유는 대여일을 시작으로 대여기간으로 집계하기 때문에 start_date의 날짜도 포함하기 위해서)
  5. ORDER BY 절: car_id, AVERAGE_DURATION 의 내림차순

배운점

  • datediff(a,b)는 a-b의 차이나는 날짜에 대해 계산해주지만 문제에 따라서 +1을 해주어야 함
  • 그룹화 한상태로 필터링 하고 싶을 땨ㅐ는 having