코드
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 AVERAGE_DURATION DESC, CAR_ID DESC
쿼리 실행 순서
단계 | 절 | 설명 |
① | FROM | 테이블에서 데이터 로딩: CAR_RENTAL_COMPANY_RENTAL_HISTORY |
② | GROUP BY | CAR_ID를 기준으로 그룹핑 |
③ | SELECT 내부의 AVG(...) 계산 | 각 그룹에 대해 평균 대여 기간 계산 |
④ | HAVING | 그룹별 평균 대여 기간이 >= 7인지 필터링 |
⑤ | SELECT | 필터링된 결과에서 CAR_ID, ROUND(...) AS AVERAGE_DURATION 계산 |
⑥ | ORDER BY | 결과를 AVERAGE_DURATION DESC, CAR_ID DESC로 정렬 |
주의점
문제에서 다음 문구를 주의해야합니다.
CAR_ID 가 2인 자동차의 대여기록의 기간이 아래와 같다면
대여기간은 0일 일까요? 아니면 1일 일까요?
HISTORY_ID | CAR_ID | START_DATE | END_DATE |
3 | 2 | 2022-09-05 | 2022-09-05 |
문제에서 제시한 대여기간은 1일입니다. 따라서 당일치기인 대여기간도 1일로 계산해주는 것이 옳습니다.
따라서 DATEDIFF(END_DATE, START_DATE) + 1 로 계산해줘야합니다.
'프로그래머스' 카테고리의 다른 글
[SQL] PERCENT_RANK() 윈도우 함수 완전 정리 (0) | 2025.05.12 |
---|---|
[프로그래머스 SQL] 대장균의 크기에 따라 분류하기 2 (0) | 2025.05.12 |
[프로그래머스 SQL] 조건에 맞는 개발자 찾기 (0) | 2025.03.19 |
[프로그래머스 SQL] 이름에 el이 들어가는 동물 찾기 (0) | 2025.03.18 |
[프로그래머스 SQL] 멸종위기의 대장균 찾기 (0) | 2025.03.18 |