[SQL] 20240311

김예지·2024년 3월 11일

SQL 풀이

목록 보기
26/26
post-thumbnail

*프로그래머스 SQL 문제 풀이입니다.


문제 1: 자동차 대여 기록별 대여 금액 구하기

📃 문제 1 링크

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

🔎 풀이 포인트

  • 조건: 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력
  • 정렬: 대여 금액 기준 내림차순, 대여 금액 기준 대여 기록 ID 내림차순
  • OUTPUT COLUMNS: history_id, fee

제출 답안

SELECT B.HISTORY_ID, MIN(A.DAILY_FEE*(B.END_DATE-B.START_DATE+1)*NVL(DISCOUNT_RATE,1)) AS FEE
FROM CAR_RENTAL_COMPANY_CAR A LEFT OUTER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY B
ON A.CAR_ID = B.CAR_ID
LEFT OUTER JOIN (
    SELECT CAR_TYPE, DURATION_TYPE, 1-(DISCOUNT_RATE/100) AS DISCOUNT_RATE
    FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
) C
ON A.CAR_TYPE = C.CAR_TYPE
    AND (B.END_DATE-B.START_DATE+1) >= TO_NUMBER(REGEXP_REPLACE(C.DURATION_TYPE,'[^0-9]'))
WHERE A.CAR_TYPE = '트럭'
GROUP BY HISTORY_ID
ORDER BY FEE DESC, HISTORY_ID DESC
---
profile
넓고 얕게? 좁고 깊게?

0개의 댓글