1. 문제
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
평균 대여 기간(AVERAGE_DURATION)이 7일 이상인 자동차들의 자동차 ID(CAR_ID)와 평균 대여 기간 리스트를 출력하는 문제. 평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬하는데 만약 이 값이 같다면 자동차 ID를 기준으로 내림차순 정렬.
2. 풀이
- 대여 기간은 빌린 날부터 1일이므로 end_date - start_date+1로 계산해야 함
- 평균 대여 기간을 소수점 두번째 자리에서 반올림 : ROUND(AVG(end_date - start_date+1), 1)
- 평균 대여 기간 기준 내림차순 정렬, 같다면 ID 기준 내림차순 정렬 : ORDER BY average_duration DESC, car_id DESC
- 평균 대여 기간이 7일 이상 : WHERE average_duration >= 7
✏️ 정답 쿼리
SELECT car_id, TO_CHAR(average_duration, '990.0') AS average_duration
FROM (
SELECT car_id,
ROUND(AVG(end_date - start_date+1), 1) AS average_duration
FROM car_rental_company_rental_history
GROUP BY car_id
ORDER BY average_duration DESC,
car_id DESC
)
WHERE average_duration >= 7
=> ROUND( )를 했을 때 반올림 결과가 xxx.0이라면 소숫점은 출력되지 않는데 출력 형태에서는 xxx.0 형태가 명시되어 있음
=> 이를 위해 TO_CHAR(average_duration, '999.0') 포맷 사용
https://semin1127.tistory.com/115
'[Programmers] > - SQL' 카테고리의 다른 글
[Oracle][Programmers] 자동차 대여 기록에서 대여중/대여 가능 여부 구분하기 (1) | 2025.05.27 |
---|---|
[Oracle][Programmers] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2025.05.25 |
[Oracle][Programmers] 조건에 부합하는 중고거래 상태 조회하기(Lv 2) (0) | 2025.05.24 |
[Oracle][Programmers] 여러 기준으로 정렬하기 (0) | 2025.05.24 |
[Oracle][Programmers] 상위 n개 레코드 (0) | 2025.05.24 |