https://school.programmers.co.kr/learn/courses/30/lessons/157342
문제 설명
- Lv 2 문제
- 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명:AVERAGE_DURATION) 리스트를 출력
- 평균 대여 기간은 소수점 두번째 자리에서 반올림
- 결과는 평균 대여 기간을 기준으로 내림차순 정렬, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬
문제 풀이
SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1),1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVG(DATEDIFF(END_DATE, START_DATE)+1) >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
◼️ CAR_ID 칼럼으로 그룹화
- CAR_ID 칼럼으로 그룹화한 후, CAR_ID(자동차 대여 기록 ID)별로 평균 대여 기간이 7일 이상인 그룹만 추출
- 이 때, DATEDIFF 함수로 두 날짜 간의 차이를 구한다.
- (두 날짜 간 차이) + 1 을 해줘야 총 대여기간이 된다.
(ex. 시작일이 2024-06-09, 종료일이 2024-06-09이면 총 대여기간은 1일)
- AVG 함수로 대여 기간의 평균을 구한다.
◼️ ROUND 함수로 AVERAGE_DURATION(평균 대여 기간)을 소수점 두 번째 자리에서 반올림
◼️ ORDER BY 로 평균 대여 기간 기준 내림차순, 자동차 ID 기준 내림차순으로 정렬
✔️실패한 풀이
이렇게 하면 평균 대여 기간이 아닌 그냥 대여 기간이 7일 이상인 자동차 대여 기록 정보를 가지고, 자동차 대여 기록 ID 별 평균 대여 기간을 출력하게 된다.
SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1),1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATEDIFF(END_DATE, START_DATE)+1 >= 7
GROUP BY CAR_ID
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
또한 처음에 두 날짜 간의 차이를 구하기 위해서 END_DATE - START_DATE 를 했었는데, 날짜가 아닌 하나의 숫자로 인식을 하고 계산이 되는 것 같다.
'PS > SQL' 카테고리의 다른 글
[프로그래머스][SQL] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2024.06.18 |
---|---|
[프로그래머스][SQL] 조건에 부합하는 중고거래 상태 조회하기 (0) | 2024.06.18 |
[프로그래머스][SQL]업그레이드 할 수 없는 아이템 구하기 (0) | 2024.06.11 |
[프로그래머스][SQL] 조건에 맞는 사용자 정보 조회하기 (0) | 2024.06.10 |
[프로그래머스][SQL] 프로그래머스 SQL 문제 풀이 (1) (0) | 2024.06.04 |