Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 분할정복
- 크루스칼
- BFS
- 서브쿼리
- 재귀
- 자료구조
- 다시
- 플로이드-워셜
- GROUP BY
- 그래프 이론
- 우선순위큐
- MST
- 트리
- 수학
- 브루트포스
- DP
- 투포인터
- 시뮬레이션
- 구현
- 누적합
- 다익스트라
- 그래프 탐색
- 백트래킹
- 다이나믹프로그래밍
- join
- 다이나믹 프로그래밍
- DFS
- 그리디
- 해시
- 에라토스테네스의 체
Archives
- Today
- Total
기록하고 까먹지 말기
(SQL) 자동차 평균 대여 기간 구하기 본문
날짜 : 2023. 10. 01
사용 언어 : oracle
문제
코드
-- 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION)
-- 평균 대여 기간은 소수점 두번째 자리에서 반올림
-- 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고,
-- 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬
select car_id, round(avg(end_date - start_date + 1), 1) as average_duration
from car_rental_company_rental_history
group by car_id
having round(avg(end_date - start_date + 1), 1) >= 7
order by average_duration desc, car_id desc
;
풀이
- car_id로 그룹핑한 다음, 각 그룹별 평균 대여기간을 구한다.
- 대여기간의 경우에 end_date와 start_date와의 차이를 구한 후 1을 더하여 구한다.
(1일부터 5일동안 대여한 경우에는 5-1 = 4일이 아닌, 꽉 채워서 대여한 것이기 때문에 5-1+1 = 5가 되기 때문이다.)
- 그 다음 해당 값을 소수점 2의 자리에서 반올림한 다음, 7 이상인 케이스만 걸러내어 정렬 후 출력한다.
알게된 점
- having에서 alias를 사용하여 계속 오류가 발생했고, 각각의 대여기간을 구하면서 1을 더하지 않아 문제에서 오답이 발생했다.
- 문제를 풀면서 alias 관련해 계속 오류가 뜨는 것을 확인했는데 이 점을 주의해야겠다.
참고 사이트
-
'전공 > 프로그래머스' 카테고리의 다른 글
(SQL) 오랜 기간 보호한 동물(2) (0) | 2023.10.01 |
---|---|
(SQL) 중성화 여부 파악하기 (0) | 2023.10.01 |
게임 맵 최단거리 (0) | 2023.09.29 |
(SQL) 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2023.09.28 |
124나라의 숫자 (0) | 2023.09.26 |