본문 바로가기

프로그래머스

SQL - 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기_JOIN

반응형

1. 문제

CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬, 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정렬해주세요.

 

*문제 원본은 '문제링크' 참고 

2. 학습 내용

1) LEFT JOIN 이용한 데이터 조회

*사용 이유: 모든 레코드 포함하면서, 해당하는 조인 조건에 맞는 레코드만 추출하기 위함

2) CAST 이용한 type 변경

🔎 3. 작성 코드

-- 코드를 입력하세요
SELECT
    C.CAR_ID,
    C.CAR_TYPE,
    CAST(C.DAILY_FEE * (1 - COALESCE(D.DISCOUNT_RATE, 0) / 100) * 30 AS UNSIGNED) AS FEE
FROM
    CAR_RENTAL_COMPANY_CAR C
LEFT JOIN
    CAR_RENTAL_COMPANY_DISCOUNT_PLAN D ON C.CAR_TYPE = D.CAR_TYPE
        AND D.DURATION_TYPE = '30일 이상'
LEFT JOIN
    CAR_RENTAL_COMPANY_RENTAL_HISTORY H ON C.CAR_ID = H.CAR_ID
        AND H.START_DATE <= '2022-11-30' AND H.END_DATE >= '2022-11-01'
WHERE
    (C.CAR_TYPE = '세단' OR C.CAR_TYPE = 'SUV')
    AND H.HISTORY_ID IS NULL
    AND CAST(C.DAILY_FEE * (1 - COALESCE(D.DISCOUNT_RATE, 0) / 100) * 30 AS UNSIGNED) >= 500000
    AND CAST(C.DAILY_FEE * (1 - COALESCE(D.DISCOUNT_RATE, 0) / 100) * 30 AS UNSIGNED) < 2000000
ORDER BY
    FEE DESC,
    C.CAR_TYPE ASC,
    C.CAR_ID DESC;
반응형