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
- 스파르타 코딩
- 내일배움
- harkerrank
- SQL
- 중회귀모형
- 프로젝트
- 스파르타
- 내일배움카드
- 파이썬 머신러닝 완벽가이드
- 오블완
- 내일배움캠프
- 웹 스크랩핑
- 회귀분석
- 파이썬 머신러닝 완벽 가이드
- hackerrank
- 텍스트 분석
- 미세먼지
- 실전 데이터 분석 프로젝트
- 파이썬
- 프로그래머스
- wil
- 파이썬 철저 입문
- 티스토리챌린지
- TiL
- 스파르타코딩
- Cluster
- 파이썬 철저입문
- 어쩌다 마케팅
- MySQL
- R
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_CARCAR_IDCAR_TYPEDAILY_FEEOPTIONS
CAR_RENTAL_COMPANY_RENTAL_HISTORYHISTORY_IDCAR_IDSTART_DATEEND_DATE
CAR_RENTAL_COMPANY_DISCOUNT_PLANPLAN_IDCAR_TYPEDURATION_TYPEDISCOUNT_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 |