-
[SQL 프로그래머스 STRING, DATE] 자동차 대여 기록 별 대여 금액 구하기(ORACLE, MYSQL)<프로그래머스 고득점 SQL Kit> 2023. 6. 10. 17:45728x90
자동차 대여 기록 별 대여 금액 구하기
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
--MYSQL
SELECT HISTORY_ID,
ROUND(DAILY_FEE*(DATEDIFF(END_DATE, START_DATE)+1)
*(100-IF(DISCOUNT_RATE IS NULL, 0, DISCOUNT_RATE))/100) AS FEE
FROM CAR_RENTAL_COMPANY_CAR AS A
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY AS B
ON A.CAR_ID = B.CAR_ID
LEFT OUTER JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN AS C
ON A.CAR_TYPE = C.CAR_TYPE
AND C.DURATION_TYPE = (CASE WHEN DATEDIFF(END_DATE,START_DATE)+1>='90' THEN '90일 이상'
WHEN DATEDIFF(END_DATE,START_DATE)+1>='30' THEN '30일 이상'
WHEN DATEDIFF(END_DATE,START_DATE)+1>='7' THEN '7일 이상'
ELSE NULL END)
WHERE 1=1
AND A.CAR_TYPE = '트럭'
ORDER BY FEE DESC, B.HISTORY_ID DESC;
--ORACLE
SELECT HISTORY_ID,
(DAILY_FEE*(B.END_DATE-B.START_DATE+1))*NVL(1-DISCOUNT_RATE/100, 1) AS FEE
FROM CAR_RENTAL_COMPANY_CAR A
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY B
ON A.CAR_ID = B.CAR_ID
LEFT OUTER JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN C
ON A.CAR_TYPE = C.CAR_TYPE
AND C.DURATION_TYPE = (CASE WHEN (B.END_DATE-B.START_DATE+1)>='90' THEN '90일 이상'
WHEN (B.END_DATE-B.START_DATE+1)>='30' THEN '30일 이상'
WHEN (B.END_DATE-B.START_DATE+1)>='7' THEN '7일 이상'
ELSE NULL END)
WHERE 1=1
AND A.CAR_TYPE = '트럭'
ORDER BY FEE DESC, B.HISTORY_ID DESC;728x90'<프로그래머스 고득점 SQL Kit>' 카테고리의 다른 글
[SQL 프로그래머스 STRING, DATE] 취소되지 않은 진료 예약 조회하기(ORACLE, MYSQL) (2) 2023.06.11 [SQL 프로그래머스 STRING, DATE] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기(ORACLE, MYSQL) (0) 2023.06.10 [SQL 프로그래머스 SELECT] 재구매가 일어난 상품과 회원 리스트 구하기(ORACLE, MYSQL) (0) 2023.06.10 [SQL 프로그래머스 SELECT] 오프라인/온라인 판매 데이터 통합하기(ORACLE, MYSQL) (0) 2023.06.10 [SQL 프로그래머스 SELECT] 상위 n개 레코드(ORACLE, MYSQL) (0) 2023.06.09