설득이
2024. 4. 5. 21:40
코드카타
특징 기간동안 대여 가능한 자동차들의 대여비용 구하기
자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 2022년 11월 1일 부터 2022년 11월 30일까지 대여가능한 자동차는 자동차 ID가 1, 4, 5인 자동차입니다.
일일 대여 요금에 자동차 종류 별 대여기간이 30일 이상인 경우의 할인율을 적용하여 30일간의 대여 금액을 구하면,
자동차 ID가 1인 경우,
일일 대여 금액 25,000원에서 8% 할인율을 적용하고 30일을 곱하면 총 대여 금액은 690,000원자동차 ID가 4인 경우,
일일 대여 금액 12,000원에서 10% 할인율을 적용하고 30일을 곱하면 총 대여 금액은 324,000원자동차 ID가 5인 경우, 일일 대여 금액 22,000원에서 10% 할인율을 적용하고 30일을 곱하면 총 대여 금액은 621,000원이고,
대여 금액이 50만원 이상 200만원 미만인 경우에 대해서 대여 금액을 기준으로 내림차순, 자동차 종류를 기준으로 오름차순 및 자동차 ID를 기준으로 내림차순 정렬하면 다음과 같아야 합니다.
- 정수 : FLOOR
- 자동차 종류가 '세단' 또는 'SUV' : WHERE IN
- 대여기간이 30일 이상 : = '30일 이상'
- 자동차 ID가 1, 4, 5 : GROUP BY
- 2022년 11월 1일 부터 2022년 11월 30일까지 대여가능한 자동차 : HAVING
- 대여 금액이 50만원 이상 200만원 미만 : FEE >= 50만원, FEE < 200만원
- 내림차순 정렬 : ORDER BY
select c.car_id, c.car_type, floor(c.daily_fee * 30 * (1-p.discount_rate*0.01)) as fee
from car_rental_company_car c, car_rental_company_rental_history h, car_rental_company_discount_plan p
where c.car_id = h.car_id
and c.car_type = p.car_type
and c.car_type in ('세단', 'SUV')
and p.duration_type = '30일 이상'
group by c.car_id
having max(h.end_date) < '2022-11-01'
and fee >= 500000 and fee < 2000000
order by fee desc, c.car_type, c.car_id desc;
자동차 대여 기록 별 대여 금액 구하기
자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요.
결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬
- 자동차 종류가 '트럭' : WHERE = 트럭
- 대여 금액 리스트 : END DATE - START DATE -> DATEDIFF
- 대여 금액 리스트 : CASE WHEN BETWEEN A AND B
- 대여 기록 별로 대여 금액 : 요금 * 대여기록 리스트 * 100 - 할인율 * 0.01
- 정렬 : ORDER BY
SELECT DISTINCT HISTORY_ID, FEE
FROM
(SELECT H.history_id as HISTORY_ID,
DATEDIFF(end_date, start_date) AS 'DATE_DIFF',
CASE
WHEN (DATEDIFF(end_date, start_date)+1 BETWEEN 7 AND 29) AND duration_type = '7일 이상' THEN ROUND(daily_fee * (DATEDIFF(end_date, start_date)+1) * (100 - discount_rate) * 0.01)
WHEN (DATEDIFF(end_date, start_date)+1 BETWEEN 30 AND 89) AND duration_type = '30일 이상' THEN ROUND(daily_fee * (DATEDIFF(end_date, start_date)+1) * (100 - discount_rate) * 0.01)
WHEN (DATEDIFF(end_date, start_date)+1 >= 90) AND duration_type = '90일 이상' THEN ROUND(daily_fee *(DATEDIFF(end_date, start_date)+1) * (100 - discount_rate) * 0.01)
WHEN (DATEDIFF(end_date, start_date) < 7) THEN ROUND(daily_fee * (DATEDIFF(end_date, start_date)+1))
ELSE NULL
END AS 'FEE'
FROM CAR_RENTAL_COMPANY_CAR AS C
LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY AS H ON C.car_id = H.car_id
LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN AS P ON C.car_type = P.car_type
WHERE C.car_type = '트럭') AS A
WHERE FEE IS NOT NULL
ORDER BY FEE DESC, history_id DESC;
상품을 구매한 회원 비율 구하기
2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요.
상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.
- 년, 월 별로 출력 : YEAR, MONTH
- 2021년에 가입한 전체 회원 수 : 서브쿼리
- 상품을 구매한 회원의 비율 : 2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수
- 회원의 비율은 소수점 두번째자리에서 반올림 : ROUND
- 년, 월 별 : GROUP BY
- 오름차순 정렬 : ORDER BY
SELECT YEAR(SALES_DATE) AS YEAR , MONTH(SALES_DATE) AS MONTH, COUNT(DISTINCT USER_ID) AS PUCHASED_USERS , ROUND(COUNT(DISTINCT USER_ID) / (SELECT COUNT(*) FROM USER_INFO WHERE YEAR(JOINED) = "2021"),1) AS PUCHASED_RATIO
FROM ONLINE_SALE
WHERE USER_ID IN
(SELECT USER_ID
FROM USER_INFO
WHERE YEAR(JOINED) = "2021")
GROUP BY YEAR(SALES_DATE) , MONTH(SALES_DATE)
ORDER BY YEAR , MONTH;