https://school.programmers.co.kr/learn/courses/30/lessons/157342
코딩테스트 연습 > String, Date > 자동차 평균 대여 기간 구하기
문제 분석
난이도: LEVEL2
문제 요구사항
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성해주세요.
평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬해주세요.
문제 핵심
1) 날짜 계산 함수 사용하기
단순 END_DATE - START_DATE 를 하면 원하는 날짜 차이가 나오지 않는다.
그래서 두 기간 사이의 일수 계산을 계산해주는 DATEDIFF() 함수를 사용한다.
DATEDIFF(종료날짜, 시작날짜)
- 날짜 포맷에 시간이 포함되어 있는 경우, 시간은 계산에 포함하지 않는다.
- 날짜 범위에서 벗어나는 값을 입력하는 경우 NULL을 반환한다.
2) DATEDIFF() 결과 + 1
START_DATE: '2024-09-09': END_DATE '2024-09-09'
DATEDIFF(END_DATE, START_DATE) 결과는 0이다.
하지만 문제에서 대여기간 계산은 오늘 빌려서 오늘 반납은 대여기간을 1로 계산한다.
그러니 DATEDIFF + 1
정답 코드
SELECT
CAR_ID,
ROUND(AVG(DATEDIFF(END_DATE, START_DATE) + 1), 1) AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVERAGE_DURATION >= 7
ORDER BY
2 DESC,
1 DESC
'Algorithm > Programmers SQL' 카테고리의 다른 글
[MySQL] 프로그래머스 조건에 맞는 도서와 저자 리스트 출력하기 (2) | 2024.09.09 |
---|---|
[MySQL] 프로그래머스 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (2) | 2024.09.09 |
[MySQL] 프로그래머스 조건에 부합하는 중고거래 상태 조회하기 (0) | 2024.09.09 |
[MySQL] 프로그래머스 조건에 맞는 아이템들의 가격의 총합 구하기 (0) | 2024.09.09 |
[MySQL] 프로그래머스 ROOT 아이템 구하기 (1) | 2024.09.08 |