출처
문제
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 ->결과반환
- FROM 절: CAR_RENTAL_COMPANY_RENTAL_HISTORY테이블에서
- GROUP BY 절: car_id별로 그룹화하여 end_date,start_date날짜의 차+1에 대해 평균을 구한다
- HAVING 절: car_id별로 두 날짜의 차 +1의 평균이 7 이상일 경우 필터링 하여
- SELECT 절: car_id와 car_id별로 그룹화하여 end_date,start_date날짜의 차+1에 대한 평균을 2자에에서 반올림한 수를 AVERAGE_DURATION 컬럼에 조회(대여 시작일과 반납일의 차에서 +1을 하는 이유는 대여일을 시작으로 대여기간으로 집계하기 때문에 start_date의 날짜도 포함하기 위해서)
- ORDER BY 절: car_id, AVERAGE_DURATION 의 내림차순
배운점
- datediff(a,b)는 a-b의 차이나는 날짜에 대해 계산해주지만 문제에 따라서 +1을 해주어야 함
- 그룹화 한상태로 필터링 하고 싶을 땨ㅐ는 having
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] 우유와 요거트가 담긴 장바구니 (0) | 2024.01.26 |
---|---|
[문제풀이] 헤비 유저가 소유한 장소 (0) | 2024.01.26 |
[문제풀이] 서울에 위치한 식당 목록 출력하기 (1) | 2024.01.25 |
[문제풀이] 자동차 대여 기록에서 장기/단기 대여 구분하기 (1) | 2024.01.25 |
[문제풀이] 취소되지 않은 진료 예약 조회하기 (1) | 2024.01.24 |