728x90
문제
-- CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서
-- 평균 대여 기간이 7일 이상인 자동차들의
-- 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력
-- 평균 대여 기간은 소수점 두번째 자리에서 반올림
-- 결과는 평균 대여 기간을 기준으로 내림차순 정렬
-- 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬해주세요.
풀이방법
1. CAR_ID와 AVERAGE_DURATION를 출력할 것이므로 SELECT
2. AVERAGE_DURATION을 만들어 주기 위해 TIMESTAMPDIFF 사용해서 SELECT문에서 연산
이때, TIMESTAMPTDIFF연산을 이용하면 원하는 시간 단위를 선택할 수 있다.
이 문제에션 일 단위로 구하되 소수점이 필요하므로, 시간단위로 계산 후 24를 곱해준다. 단, 31일인 경우도 있으므로 +1
TIMESTAMPDIFF(원하는_단위, 시작시간, 종료시간)
단위 : YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND
------------------------------------------------
DATEDIFF() 연산자의 경우, 비슷한 운용이 되지만 단위 지정이 불가하다
3. 연산을 완료한 AVERAGE_DURATION값을 ROUND로 반올림해주되, 소수점 1번째 자리까지 구할 것이므로 ,1 넣어줌
ROUND(실수, 소수점_자릿수)
예시)
ROUND(127.16, 1) => 127.2
4. 이때, 평균 계산을 CAR_ID단위로 계산할 것이므로 GROUP BY로 CAR_ID를 엮음
5. 조건을 7이상인 경우로 한정하기 위해 HAVING 사용. SELECT문으로 할당한 AVERAGE_DURATION을 대상으로 실행
나의 코드
SELECT CAR_ID, ROUND(AVG(TIMESTAMPDIFF(HOUR,START_DATE,END_DATE)/24+1), 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
레퍼런스 코드
문제 레퍼런스 : 레퍼런스 링크
DATEDIFF / TIMESTAMPDIFF 레퍼런스 : 레퍼런스 링크
728x90
'알고리즘 저장소 (일반방식과 나만의 풀이) > SQL' 카테고리의 다른 글
[Programmers] no144854: 조건에 맞는 도서와 저자 리스트 출력하기 (1) | 2023.03.15 |
---|---|
[Programmers] no151137: 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2023.03.15 |
[Programmers] no164672: 조건에 부합하는 중고거래 상태 조회하기 (0) | 2023.03.14 |
[Programmers] no59039: 이름이 없는 동물의 아이디 (0) | 2023.03.14 |
[Programmers] no59405: 상위 n개 레코드 (0) | 2023.03.14 |