자동차 평균 대여 기간 구하기 문제는 다음과 같다.



이번 문제를 풀기 위해선
1. 자동차 ID, 날짜 일수 차이 출력
2. 날짜 일수 차이를 통한 평균값 출력, 소수점 두번째 자리에서 반올림
3. 평균 대여 기간이 7일 이상인 자동차 출력
4. 평균 대여 기간 기준 내림차순 정렬
5. 평균 대여 기간이 같은 경우 자동차 ID 기준 내림차순 정렬
순으로 접근해야 한다.
우선 자동차 ID와
대여 시작일과 반납일의 일수 차이를 구하도록 하겠다.
일수 차이를 구하기 위해 DATEDIFF( )를 사용해주겠다.
DATEDIFF( )의 자세한 사용법은 아래글을 확인해주길 바란다.
https://djsflsdudn57.tistory.com/150
날짜 차이 일수 구하기
두 날짜 사이의 일수를 구할 수 있는 함수로는 1. DATEDIFF( ) 2. TIMESTAMPDIFF( ) 가 있다. 1. DATEDIFF( ): 두 날짜간 일수 차이를 구함 DATEDIFF(DATE1, DATE2); -> 결과: DATE1 - DATE2 2. TIMESTAMPDIFF( ): 연, 분기, 월, 주,
djsflsdudn57.tistory.com
DATEDIFF( )를 사용해 쿼리문을 짜면 다음과 같다.

DATEDIFF(END_DATE, START_DATE) + 1 을 꼭 해주어야 한다.
이유는 우리가 1부터 10까지의 개수를 구할 때 10 - 1= 9의 과정을 통해
9개라고 하지 않고 10개라고 하는 것과 같다고 생각하면 된다.
좀 더 이해하기 쉽게 설명을 하면
만일 데이터에 START_DATE가 2023-03-03, END_DATE가 2023-03-03인데
날짜를 셀 때에는 3일부터 3일까지이면 하루라고 친다.
따라서 위와 같은 경우를 처리하기 위해 1을 더해준다고 생각하면 된다.
(위의 경우 DATEDIFF( )를 실행시켜보면 0이 나온다.)
이제 시작일과 반납일의 차이 일수를 구했으니
평균을 구하여, 소숫점 둘째 자리에서 반올림 해주겠다.
평균을 구하기 위해서 AVG( )를,
반올림을 위해서 ROUND( )를 사용해주겠다.
평균을 구해준 다음, 나온 평균을 반올림 시켜야 하기에
쿼리문을 짜면 아래와 같은 형태가 된다.
(수식과 마찬가지로 괄호 가장 안쪽의 연산부터 시작된다고 생각하면 된다.)

이제 평균 대여 일수가 7일 이상인
차량의 경우만 출력되도록 조건을 걸어주겠다.
그러나 조건을 걸어주기에 먼저 앞서서 해야하는 것이 있다.
평균 대여 일수가 7일 이상인 차량만 출력이 되어야 하고,
해당 차량의 평균 대여 일수가 같이 출력되어야 하므로
GROUP BY절을 통해 결과가 각각의 차량별로 나오도록 만들어 주어야 한다.

GROUP BY절을 걸어주었으니
평균 대여 기간이 7일 이상일 경우 출력해야한단
조건은 HAVING절을 통해 적어주어야 한다.
평균 대여 기간 필드의 별명으로 AVERAGE_DURATION을
적어두었으니, 이 별명을 잘 써먹어주면 된다.

그리고 마지막으로 정렬을 해주겠다.
평균 대여 일수를 기준으로 내림차순,
평균 대여 일수가 같을 경우에는
자동차 ID를 기준으로 내림차순 정렬 해주어야 한다.

이제 정답인지 확인해보겠다.

정답이다.
'DB > 문제풀이' 카테고리의 다른 글
| [프로그래머스] 없어진 기록 찾기 -LV.3 (0) | 2023.03.04 |
|---|---|
| [프로그래머스] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 -LV.2 (0) | 2023.02.28 |
| [프로그래머스] 조건에 맞는 도서와 저자 리스트 출력하기 -LV.2 (0) | 2023.02.21 |
| [프로그래머스]성분으로 구분한 아이스크림 총 주문량 -LV.2 (0) | 2023.02.20 |
| [프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 -LV.3 (0) | 2023.02.02 |