https://school.programmers.co.kr/learn/courses/30/lessons/151141
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
코드
SELECT
HISTORY_ID,
ROUND (CASE
WHEN TIMESTAMPDIFF(DAY, START_DATE, END_DATE) + 1>= 90 THEN (daily_fee * (TIMESTAMPDIFF(DAY, START_DATE, END_DATE) + 1)) * (1 - (discount_rate / 100))
WHEN TIMESTAMPDIFF(DAY, START_DATE, END_DATE) + 1>= 30 THEN (daily_fee * (TIMESTAMPDIFF(DAY, START_DATE, END_DATE) + 1)) * (1 - (discount_rate / 100))
WHEN TIMESTAMPDIFF(DAY, START_DATE, END_DATE) + 1>= 7 THEN (daily_fee * (TIMESTAMPDIFF(DAY, START_DATE, END_DATE) + 1)) * (1 - (discount_rate / 100))
ELSE (daily_fee * (TIMESTAMPDIFF(DAY, START_DATE, END_DATE) + 1))
END) AS FEE
FROM
CAR_RENTAL_COMPANY_CAR C
JOIN
CAR_RENTAL_COMPANY_RENTAL_HISTORY H ON H.CAR_ID = C.CAR_ID
LEFT JOIN
CAR_RENTAL_COMPANY_DISCOUNT_PLAN P ON C.CAR_TYPE = P.CAR_TYPE AND
CASE
WHEN TIMESTAMPDIFF(DAY, START_DATE, END_DATE) + 1>= 90 THEN "90일 이상"
WHEN TIMESTAMPDIFF(DAY, START_DATE, END_DATE) + 1>= 30 THEN "30일 이상"
WHEN TIMESTAMPDIFF(DAY, START_DATE, END_DATE) + 1>= 7 THEN "7일 이상"
ELSE "해당없음"
END = P.DURATION_TYPE
WHERE
C.CAR_TYPE = "트럭"
ORDER BY
FEE DESC,
HISTORY_ID DESC
이문제 상당히 오래걸렸다.
JOIN으로 CASE WHEN절을 사용하는 법을 몰랐기 때문이다. 예를 들면
CASE
When 조건 then 열 이름
End = 조인 할 컬럼을 쓴다
'MYSQL > 프로그래머스 LV04' 카테고리의 다른 글
취소되지 않은 진료 예약 조회하기 (0) | 2025.03.21 |
---|---|
언어별 개발자 분류하기 (0) | 2025.03.20 |
저자 별 카테고리 별 매출액 집계하기 (0) | 2025.03.15 |
특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (1) | 2025.03.15 |
FrontEnd 개발자 찾기 (0) | 2025.03.15 |