꿈꾸는 개발자의 블로그
[프로그래머스] Oracle - (SQL 고득점 Kit) JOIN 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 본문
Algorithm/Programmers
[프로그래머스] Oracle - (SQL 고득점 Kit) JOIN 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기
aldrn29 2023. 2. 22. 13:53문제
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 2) 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 3) 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고 2) 30일간의 4) 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬, 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정렬해주세요.
문제 풀이
이 문제는 이상하게 시간이 오래 걸렸다..ㅠㅠ 해당 기간에 대여할 수 있는 CAR_ID를 찾아오는 과정에서 문제가 발생했다. 나는 당연히 HISTORY_ID가 가장 최근인 데이터만 비교하면 될 줄 알았는데, 이전에도 해당 기간에 대여할 수 없는 데이터(CAR_ID가 18, 27인 자동차..!!!)가 존재한 것이다. 그래서 조건을 바꿔주니 통과되었다.
- 자동차 ID, TYPE별 대여 금액을 알기 위하여 CAR_RENTAL_COMPANY_CAR, CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블을 JOIN 한다.
- 자동차 종류와 30일 간의 대여금액에 대해서만 계산하기 위하여 WHERE 조건을 건 후, 할인율을 조회한다.
- CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블의 대여 목록에서 하나라도 해당 기간에 대여하고 있는 CAR_ID를 알기 위하여 WHERE 조건에 서브쿼리를 구현하고, 기존 쿼리의 CAR_ID가 포함되어 있지 않은지 확인한다. (기존 쿼리의 CAR_ID가 서브쿼리 결과에 속해있다면, 해당 기간에 대여하고 있는 목록이 적어도 하나는 있음)
- 대여 금액을 확인하기 위하여 WHERE 조건을 건다.
전체 코드
SELECT DISTINCT a.CAR_ID, a.CAR_TYPE, DAILY_FEE * DISCOUNT_RATE * 30 AS FEE
FROM CAR_RENTAL_COMPANY_CAR a JOIN (
SELECT CAR_TYPE, (100 - RTRIM(DISCOUNT_RATE, '%')) * 0.01 AS DISCOUNT_RATE -- 2
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
WHERE CAR_TYPE IN ('세단', 'SUV') AND DURATION_TYPE = '30일 이상' -- 2
) b ON a.CAR_TYPE = b.CAR_TYPE -- 1
WHERE CAR_ID NOT IN ( -- 3
SELECT DISTINCT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE NOT (TO_CHAR(END_DATE, 'YYYY-MM-DD') < '2022-11-01'
OR TO_CHAR(START_DATE, 'YYYY-MM-DD') > '2022-11-30')
) AND DAILY_FEE * DISCOUNT_RATE * 30 BETWEEN 500000 AND 1999999 -- 4
ORDER BY 3 DESC, 2, 1 DESC
728x90
728x90
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] Oracle - (SQL 고득점 Kit) JOIN 5월 식품들의 총매출 조회하기 (0) | 2023.02.27 |
---|---|
[프로그래머스] Oracle - (SQL 고득점 Kit) JOIN 주문량이 많은 아이스크림들 조회하기 (0) | 2023.02.24 |
[프로그래머스] Oracle - (SQL 고득점 Kit) JOIN 그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2023.02.22 |
[프로그래머스] Oracle - (SQL 고득점 Kit) JOIN 조건에 맞는 도서와 저자 리스트 출력하기 (0) | 2023.02.22 |
[프로그래머스] Oracle - (SQL 고득점 Kit) GROUP BY 가격대 별 상품 개수 구하기 (0) | 2023.02.21 |
Comments