반응형
문제
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성해주세요. 평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬해주세요.
구조
HISTORY_ID, CAR_ID, START_DATE, END_DATE 는 각각 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일을 나타냅니다.
예시
처음에 작성한 쿼리
-- 코드를 입력하세요
select
car_id,
round(a.avg_term,1) AVERAGE_DURATION
from(
SELECT
car_id,
avg(to_date(end_date) - to_date(start_date) + 1) avg_term
From CAR_RENTAL_COMPANY_RENTAL_HISTORY
group by car_id
order by car_id) a
where AVERAGE_DURATION >= 7
order by AVERAGE_DURATION desc, car_id desc
틀린 이유
avg_term은 서브쿼리 내에 있어 바깥에서 조건등으로 이용이 가능하지만, AVERAGE_DURATION는 그렇지 않기에 이용이 불가능 합니다.
수정한 쿼리
-- 코드를 입력하세요
select
car_id,
a.avg_term AVERAGE_DURATION
from(
SELECT
car_id,
round(avg(to_date(end_date) - to_date(start_date) + 1),1) avg_term
From CAR_RENTAL_COMPANY_RENTAL_HISTORY
group by car_id
order by car_id) a
where a.avg_term >= 7
order by a.avg_term desc, car_id desc
조건등을 깔끔하게 보기 위해, round() 처리도 서브쿼리 내에서 처리하고, 바깥에서 필터링과, 정렬을 해줍니다.
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/157342
반응형
'코딩테스트 > Oracle DB' 카테고리의 다른 글
[Oracle] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (프로그래머스) (0) | 2023.12.20 |
---|---|
[Oracle] 조건에 부합하는 중고거래 상태 조회하기 ( 프로그래머스 ) (0) | 2023.12.20 |
[Oracle, Oracle DB] 이름이 없는 동물의 아이디 ( 23-12-19 ) (0) | 2023.12.19 |
[Oracle, Oracle DB] 동물의 아이디와 이름 ( 23-12-19 ) (0) | 2023.12.19 |
[Oracle, Oracle DB] 여러 기준으로 정렬하기 ( 23-12-19 ) (0) | 2023.12.19 |