[프로그래머스, Oracle] 자동차 대여 기록 별 대여 금액 구하기
포스트
취소

[프로그래머스, Oracle] 자동차 대여 기록 별 대여 금액 구하기

문제

CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 ‘트럭’인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.

코드

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
32
33
34
35
36
37
WITH TBL_A AS (
    SELECT A.CAR_ID, 
            A.CAR_TYPE, 
            A.DAILY_FEE, 
            B.HISTORY_ID, 
            B.DURATION, 
            COALESCE(C.DISCOUNT_RATE, 0) AS DISCOUNT_RATE,
            A.DAILY_FEE * B.DURATION * (1 - COALESCE(C.DISCOUNT_RATE, 0) / 100) AS FEE
    FROM (
            SELECT *
            FROM CAR_RENTAL_COMPANY_CAR
            WHERE CAR_TYPE='트럭'
         ) A
         LEFT JOIN (
                    SELECT CAR_ID, 
                           HISTORY_ID,
                           (END_DATE - START_DATE + 1) AS DURATION,
                           CASE WHEN 7 <= (END_DATE - START_DATE + 1) AND (END_DATE - START_DATE + 1) < 30  THEN 7
                                WHEN 30 <= (END_DATE - START_DATE + 1) AND (END_DATE - START_DATE + 1) < 90 THEN 30
                                WHEN 90 <= (END_DATE - START_DATE + 1) THEN 90
                                ELSE 0
                                END 
                                AS D_TYPE
                    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
                   ) B
                ON A.CAR_ID = B.CAR_ID
         LEFT JOIN (
                    SELECT CAR_TYPE, TO_NUMBER(REGEXP_SUBSTR(DURATION_TYPE, '\d+')) AS D_TYPE, DISCOUNT_RATE
                    FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
                    ) C 
                ON A.CAR_TYPE = C.CAR_TYPE AND B.D_TYPE = C.D_TYPE
)
SELECT HISTORY_ID,
        FEE
FROM TBL_A
ORDER BY FEE DESC, HISTORY_ID DESC
;
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

23년 11월의 공부 - Docker image 지우기, TimeSeriesSplit, pd.Grouper, groupby with custom agg function

[프로그래머스, Oracle] 취소되지 않은 진료 예약 조회하기