-
<프로그래머스> 자동차 평균 대여 기간 구하기코딩테스트/SQL 코딩테스트 2023. 12. 28. 16:27
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/157342
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 문제 요구사항
- CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의
- 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력
- 평균 대여 기간은 소수점 두 자리에서 반올림
- 결과는 평균 대여 기간을 기준으로 내림차순 정렬
- 평균 대여 기간이 같으면 자동차 아이디를 기준으로 내림차순 정렬
대여를 시작한 날 부터 1일로 치기 때문에 END_DATE에서 START_DATE를 뺀 값에 +1을 해주어야한다.
차의 평균 대여기간을 계산해야하기 때문에 CAR_ID를 기준으로 GROUP BY하여 AVG()집계함수로 계산을 해야한다.
그리고 평균 대여 기간은 소수점 두 번째 자리엣서 반올림을 해야하므로 ROUND()함수에 인수는 1로 준다.
위 요구사항을 서브쿼리로 계산한 평균 대여기간이 7일 이상인 차를 조건으로 주어 ID와 평균 대여 기간을 출력하면
문제를 해결할 수 있다.
1) Oracle
SELECT CAR_ID, 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 ) A WHERE AVERAGE_DURATION >= 7 ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
오라클은 END_DATE에서 START_DATE를 뺀 값이 날짜 차이를 의미하기 때문에 그대로 뺄셈 식을 사용한다.
2) MySQL
SELECT CAR_ID, AVERAGE_DURATION FROM ( SELECT CAR_ID, ROUND(AVG((DATEDIFF(END_DATE, START_DATE))+1), 1) AS AVERAGE_DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY 1 ) A WHERE AVERAGE_DURATION >= 7 ORDER BY 2 DESC, 1 DESC;
MySQL에서는 END_DATE에서 START_DATE를 뺀 값은 특정한 정수값을 반환하게 되기 때문에 날짜를 비교하고 싶으면
DATEFDIFF()함수를 사용해야한다.
'코딩테스트 > SQL 코딩테스트' 카테고리의 다른 글
<프로그래머스> 우유와 요거트가 담긴 장바구니 (0) 2023.12.28 <프로그래머스> 헤비 유저가 소유한 장소 (0) 2023.12.28 <프로그래머스> 년, 월, 성별 별 상품 구매 회원 수 구하기 (2) 2023.12.22 <프로그래머스> 서울에 위치한 식당 목록 출력하기 (1) 2023.12.22 <프로그래머스> 취소되지 않은 진료 예약 조회하기 (0) 2023.12.22 - 문제 요구사항