특정 기간동안 대여 가능한 자동차들의 대여비용 구하기
SELECT
CAR.CAR_ID,
CAR.CAR_TYPE,
TRUNCATE(DAILY_FEE * 30 * ((100- DISCOUNT_RATE)/100),0) AS FEE
FROM
CAR_RENTAL_COMPANY_CAR AS CAR
JOIN
CAR_RENTAL_COMPANY_RENTAL_HISTORY AS HISTORY
USING(CAR_ID)
JOIN
CAR_RENTAL_COMPANY_DISCOUNT_PLAN AS PLAN
USING(CAR_TYPE)
WHERE CAR_ID
NOT IN(
SELECT
CAR_ID
FROM
CAR_RENTAL_COMPANY_CAR AS CARS
JOIN
CAR_RENTAL_COMPANY_RENTAL_HISTORY AS HISTORIES
USING(CAR_ID)
WHERE
CAR_TYPE IN("세단","SUV")
AND
START_DATE<="2022-11-30" AND END_DATE>="2022-11-01"
)
AND
CAR_TYPE IN("세단","SUV")
AND
DURATION_TYPE="30일 이상"
GROUP BY CAR_ID
HAVING
FEE >=500000
AND
FEE <=2000000
ORDER BY 3 DESC,
2,
1 DESC
해당날짜중 대여중인 기종의 CAR_ID를 기반으로 필터링 하고 30일 기준 요금 계산 후
요금으로 한번 더 필터링 해서 마무리.
자동차 대여 기록 별 대여 금액 구하기
WITH TEMPTABLE AS(
SELECT
*,
CASE
WHEN TIMESTAMPDIFF(DAY,START_DATE,END_DATE)+1 <7 THEN NULL
WHEN TIMESTAMPDIFF(DAY,START_DATE,END_DATE)+1 <30 THEN "7일 이상"
WHEN TIMESTAMPDIFF(DAY,START_DATE,END_DATE)+1 <90 THEN "30일 이상"
ELSE "90일 이상"
END AS DURATION,
TIMESTAMPDIFF(DAY,START_DATE,END_DATE)+1 AS DAYS
FROM
CAR_RENTAL_COMPANY_CAR AS CARS
JOIN
CAR_RENTAL_COMPANY_RENTAL_HISTORY AS HISTORIES
USING (CAR_ID)
WHERE CAR_TYPE = "트럭"
)
SELECT
HISTORY_ID,
TRUNCATE(IF(DURATION IS NULL, DAYS*DAILY_FEE,
DAYS*DAILY_FEE *((100-DISCOUNT_RATE)/100)) ,0)AS FEE
FROM
CAR_RENTAL_COMPANY_DISCOUNT_PLAN AS PLAN
JOIN
TEMPTABLE
USING(CAR_TYPE)
WHERE
DURATION IS NULL
OR
DURATION_TYPE=DURATION
GROUP BY HISTORY_ID
ORDER BY 2 DESC,
1 DESC
WITH AS 문으로 트럭인 자동차들만 추려 기간에 맞추어 DURATION_TYPE 형식으로 기간 COLUMN을 추가해둔다.
TIMESTAMPDIFF(DAY , A, B)를 활용하면 하루 지날때마다 1을 세므로
10월 10일에 빌려 10월 10일에 반납한 케이스에서 0일로 체크가 되어버린다. +1 해주어야 함.
새로 만든 테이블과 할인율 테이블을 JOIN 한다.
대여기간이 동일하거나 할인이 적용되지 않는 차량만 선택해서
그에 맞추어 할인율을 적용하고
TRUNCATE(숫자,소숫점자릿수) 함수로 버림 해준다.
프로그래머스 상품을 구매한 회원 비율 구하기 (MYSQL) (0) | 2024.02.14 |
---|---|
프로그래머스 입양 시각 구하기(2) (MYSQL) (0) | 2024.02.13 |
프로그래머스 - 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (Mysql) (0) | 2024.02.13 |
프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기(MySQL) (0) | 2024.02.13 |