Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 중회귀모형
- 프로그래머스
- 내일배움카드
- 티스토리챌린지
- SQL
- hackerrank
- 스파르타코딩
- 오블완
- wil
- 파이썬 철저 입문
- harkerrank
- MySQL
- Cluster
- 파이썬 머신러닝 완벽 가이드
- 텍스트 분석
- 어쩌다 마케팅
- 미세먼지
- 스파르타
- R
- 웹 스크랩핑
- 프로젝트
- 파이썬 머신러닝 완벽가이드
- 내일배움
- 회귀분석
- TiL
- 실전 데이터 분석 프로젝트
- 스파르타 코딩
- 내일배움캠프
- 파이썬
- 파이썬 철저입문
Archives
- Today
- Total
OkBublewrap
자동차 대여 기록 별 대여 금액 구하기 본문
자동차 대여 기록 별 대여 금액 구하기
문제 설명
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
입력 테이블
CAR_RENTAL_COMPANY_CAR
CAR_ID
CAR_TYPE
DAILY_FEE
OPTIONS
CAR_RENTAL_COMPANY_RENTAL_HISTORY
HISTORY_ID
CAR_ID
START_DATE
END_DATE
CAR_RENTAL_COMPANY_DISCOUNT_PLAN
PLAN_ID
CAR_TYPE
DURATION_TYPE
DISCOUNT_RATE
풀이
1. HISTORY에서 트럭인 빌린 일수 구하기
WITH TEMP_01 AS (
SELECT
A.history_id,
DATEDIFF(A.end_date, A.start_date) + 1 AS DIFF_DAYS,
B.daily_fee
FROM
CAR_RENTAL_COMPANY_RENTAL_HISTORY A
JOIN
CAR_RENTAL_COMPANY_CAR B
ON
A.car_id = B.car_id
WHERE
B.car_type = '트럭'
)
2. 기간 숫자로 변경
TEMP_02 AS (
SELECT
CASE
WHEN DURATION_TYPE = '7일 이상' THEN 7
WHEN DURATION_TYPE = '30일 이상' THEN 30
WHEN DURATION_TYPE = '90일 이상' THEN 90
END AS duration_days,
discount_rate
FROM
CAR_RENTAL_COMPANY_DISCOUNT_PLAN
WHERE
car_type = '트럭'
)
3. 각 일수에 맞는 할인율 가져오기
TEMP_03 AS (
SELECT
T1.HISTORY_ID,
T1.DIFF_DAYS,
T1.DAILY_FEE,
CASE
WHEN T1.DIFF_DAYS >= 90 THEN (SELECT discount_rate FROM TEMP_02 WHERE duration_days = 90)
WHEN T1.DIFF_DAYS >= 30 THEN (SELECT discount_rate FROM TEMP_02 WHERE duration_days = 30)
WHEN T1.DIFF_DAYS >= 7 THEN (SELECT discount_rate FROM TEMP_02 WHERE duration_days = 7)
ELSE 0
END AS DISCOUNT_RATE
FROM
TEMP_01 T1
)
4. 총 금액 계산
SELECT
HISTORY_ID,
ROUND((DIFF_DAYS * DAILY_FEE) * (1 - DISCOUNT_RATE / 100)) AS FEE
FROM
TEMP_03
ORDER BY
FEE DESC,
HISTORY_ID DESC;
'개발 > SQL' 카테고리의 다른 글
입양 시각 구하기 (0) | 2025.01.10 |
---|---|
Weather Observation Station 20 / LAT_N 중앙값 구하기 (0) | 2025.01.10 |
헤비 유저가 소유한 장소 (0) | 2023.03.13 |
즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2023.03.13 |
대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2023.03.13 |