이 테이블에서 CAR_ID 별로 평균 대여일이 7일 이상인 CAR_ID를 대여일이 내림차순으로 출력하고 대여일이 같은게 있다면 CAR_ID를 내림차순으로 출력해라
이 문제를 풀기 앞서 알아야 하는 함수
DATEDIFF( 날짜, 날짜 ) 두 날짜사이의 일 수를 계산
ROUND( 숫자, 숫자위치) 숫자의 어느지점에서 반올림을 할 지 뒤에 숫자를 적는다.
SUM 합 GROUP으로 묶은 합 (집계함수)
COUNT 갯수 GROUP으로 묶은 개수 (집계함수)
답
SELECT CAR_ID,ROUND(SUM(DATEDIFF(END_DATE, START_DATE)+1)/COUNT(END_DATE),1) AS AVERAGE_DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVERAGE_DURATION>7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
해설
1. 그룹으로 묶어 날짜를 계산한다.
1-1 DATEDIFF 함수를 통하여 끝날자와 시작날자의 차이 계산 9월1일 9월1일 까지 이면 0이 나오지만 하루 빌린거기에 1을 추가
1-2 COUNT 함수를 통하여 몇번 빌렸는지
1-3 ROUND 함수를 통하여 소수점이 나오면 소수점1 위치에서 반올림
1-4 이렇게 계산된 컬럼의 이름을 AVERAGE_DURATION로 설정
2. HAVING 으로 7일이상인것만 예외 처리
3. 정렬을 AVERAGE_DURATION 내림차순 , 같다면 CAR_ID 내림차순
실행결과
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
Level2 구명보트 ( 탐욕법 Greedy ) (0) | 2023.05.21 |
---|---|
(MySQL LEVEL-2) 재구매가 일어난 상품과 회원 리스트 구하기 - 프로그래머스 (0) | 2023.05.12 |
프로그래머스 Level2 요약정리 (정답률 높은 문제 - 2~8번) (0) | 2023.03.24 |
자바(HashMap) (0) | 2023.02.04 |
Iterator vs Stream (0) | 2023.01.09 |
댓글