[SQL] 프로그래머스 SQL 고득점 Kit_String,Date (18/19)

餘園·2025년 8월 25일

SQL 고득점 Kit

목록 보기
105/109
post-thumbnail

자동차 대여 기록 별 대여 금액 구하기 (Level 4)

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

solve

-- gpt
SELECT
    h.HISTORY_ID,
    FLOOR(
        c.DAILY_FEE * (DATEDIFF(h.END_DATE, h.START_DATE) + 1)
        * (1 - IFNULL(MAX(dp.DISCOUNT_RATE), 0) / 100)
    ) AS FEE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY h
JOIN CAR_RENTAL_COMPANY_CAR c
  ON c.CAR_ID = h.CAR_ID
LEFT JOIN (
    SELECT
        CAR_TYPE,
        CAST(REPLACE(DURATION_TYPE, '일 이상', '') AS UNSIGNED) AS MIN_DAYS,
        CAST(REPLACE(DISCOUNT_RATE, '%', '') AS UNSIGNED) AS DISCOUNT_RATE
    FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
) dp
  ON dp.CAR_TYPE = c.CAR_TYPE
 AND dp.MIN_DAYS <= (DATEDIFF(h.END_DATE, h.START_DATE) + 1)
WHERE c.CAR_TYPE = '트럭'
GROUP BY h.HISTORY_ID, c.DAILY_FEE, h.START_DATE, h.END_DATE
ORDER BY FEE DESC, h.HISTORY_ID DESC;
  • IFNULL로 결측이면 할인을 적용하지 않는다.
  • REPLACE로 뒤에 붙은 접미사를 제거한다.
    • 나머지는 잘 모르겠다... 아직 lv.4는 어려움
profile
What else can I do

0개의 댓글