-
<프로그래머스> 자동차 대여 기록 별 대여 금액 구하기코딩테스트/SQL 코딩테스트 2024. 1. 10. 21:56
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/151141
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 문제요구사항
- 세 테이블을 조인하여 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서
- 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력
- 결과는 대여 금액을 기준으로 내림차순 정렬
- 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬
정답코드
1) MySQL
WITH RENT_HISTORY(HISTORY_ID, CAR_ID, TERM) AS ( SELECT HISTORY_ID, CAR_ID, DATEDIFF(END_DATE, START_DATE)+1 AS TERM FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY ), CAR_HISTORY(HISTORY_ID, TERM, CAR_ID, DAILY_FEE) AS ( SELECT H.HISTORY_ID, H.TERM, H.CAR_ID, C.DAILY_FEE FROM RENT_HISTORY H LEFT JOIN CAR_RENTAL_COMPANY_CAR C ON H.CAR_ID = C.CAR_ID WHERE C.CAR_TYPE = '트럭' ) SELECT HISTORY_ID, ROUND(DAILY_FEE*DISCOUNT_RATE*TERM) FEE FROM ( SELECT HISTORY_ID, DAILY_FEE, TERM, CASE WHEN TERM >= 90 THEN 0.85 WHEN TERM BETWEEN 30 AND 89 THEN 0.92 WHEN TERM BETWEEN 7 AND 29 THEN 0.95 ELSE 1 END DISCOUNT_RATE FROM CAR_HISTORY ) A ORDER BY 2 DESC, 1 DESC;
2) Oracle
WITH RENT_HISTORY(HISTORY_ID, CAR_ID, TERM) AS ( SELECT HISTORY_ID, CAR_ID, (END_DATE-START_DATE)+1 AS TERM FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY ), CAR_HISTORY(HISTORY_ID, TERM, CAR_ID, DAILY_FEE) AS ( SELECT H.HISTORY_ID, H.TERM, H.CAR_ID, C.DAILY_FEE FROM RENT_HISTORY H LEFT JOIN CAR_RENTAL_COMPANY_CAR C ON H.CAR_ID = C.CAR_ID WHERE C.CAR_TYPE = '트럭' ) SELECT HISTORY_ID, ROUND(DAILY_FEE*DISCOUNT_RATE*TERM) FEE FROM ( SELECT HISTORY_ID, DAILY_FEE, TERM, CASE WHEN TERM >= 90 THEN 0.85 WHEN TERM BETWEEN 30 AND 89 THEN 0.92 WHEN TERM BETWEEN 7 AND 29 THEN 0.95 ELSE 1 END DISCOUNT_RATE FROM CAR_HISTORY ) A ORDER BY ROUND(DAILY_FEE*DISCOUNT_RATE*TERM) DESC, HISTORY
'코딩테스트 > SQL 코딩테스트' 카테고리의 다른 글
<LeetCode> Group Sold Products By The Date (0) 2024.04.10 <프로그래머스> 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) 2024.01.10 <프로그래머스> 입양 시각 구하기(2) (0) 2024.01.09 <프로그래머스> 조건에 부합하는 중고거래 댓글 조회하기 (1) 2024.01.09 <프로그래머스> 저자 별 카테고리 별 매출액 집계하기 (0) 2023.12.28 - 문제요구사항