https://school.programmers.co.kr/learn/courses/30/lessons/157339
๋ฌธ์
CAR_RENTAL_COMPANY_CAR ํ ์ด๋ธ๊ณผ CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ ์ด๋ธ๊ณผ CAR_RENTAL_COMPANY_DISCOUNT_PLAN ํ ์ด๋ธ์์
1. ์๋์ฐจ ์ข ๋ฅ๊ฐ '์ธ๋จ' ๋๋ 'SUV' ์ธ ์๋์ฐจ ์ค
2. 2022๋ 11์ 1์ผ๋ถํฐ 2022๋ 11์ 30์ผ๊น์ง ๋์ฌ ๊ฐ๋ฅํ๊ณ
3. 30์ผ๊ฐ์ ๋์ฌ ๊ธ์ก์ด 50๋ง์ ์ด์ 200๋ง์ ๋ฏธ๋ง์ธ ์๋์ฐจ์ ๋ํด์
์๋์ฐจ ID, ์๋์ฐจ ์ข ๋ฅ, ๋์ฌ ๊ธ์ก(์ปฌ๋ผ๋ช : FEE) ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
๊ฒฐ๊ณผ๋ ๋์ฌ ๊ธ์ก์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๊ณ , ๋์ฌ ๊ธ์ก์ด ๊ฐ์ ๊ฒฝ์ฐ ์๋์ฐจ ์ข
๋ฅ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ, ์๋์ฐจ ์ข
๋ฅ๊น์ง ๊ฐ์ ๊ฒฝ์ฐ ์๋์ฐจ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
ํ์ด
์ฐ์ ์ธ๊ฐ์ง ํ ์ด๋ธ์ ์ ๋ถ ์กฐ์ธํด์ฃผ๊ณ (inner๊ฐ ์๋ left์์ ์ฃผ์)
where๋ก 1๋ฒ๊ณผ 2๋ฒ ์กฐ๊ฑด์ ํํฐ๋งํด์ฃผ๋ ๋ถ๋ถ๊น์ง๋ ์ฝ๊ฒ ๊ฐ๋ฅํ๋ค
3๋ฒ ์กฐ๊ฑด์ ๊ฒฝ์ฐ ์ด์ง ๋ ์๊ฐ์ ํด์ค์ผํ๋ค.
start date์ ์๊ด์์ด ๊ฐ์ฅ ์ต๊ทผ ๊ธฐ๋ก์ end date๊ฐ 2022๋ 11์ 01์ผ ์ด์ ์ด๊ธฐ๋ง ํ๋ฉด ๋์ฌ ๊ฐ๋ฅํ๋ค
์ด๋ ํ๊ฐ์ง ์ฐจ์ ๋ํด ๊ธฐ๋ก์ด ์ฌ๋ฌ๊ฐ ์์ ์ ์์ผ๋ฏ๋ก group by๋ฅผ ํด์ฃผ๊ณ having์ผ๋ก ๊ฐ์ฅ ์ต๊ทผ์ end date๋ก ์กฐ๊ฑด์ ๊ฑธ์ด์ฃผ์
select c.car_id, c.car_type,
floor(c.daily_fee*30*(100-p.discount_rate)/100) as fee
from car_rental_company_car c
left join car_rental_company_rental_history h on c.car_id = h.car_id
left join car_rental_company_discount_plan p on c.car_type = p.car_type
where duration_type = "30์ผ ์ด์"
and (c.car_type = '์ธ๋จ' or c.car_type = 'SUV')
and c.daily_fee*30*(100-p.discount_rate) between 50000000 and 200000000
group by c.car_id
having max(date_format(h.end_date, "%Y%m%d")) < "20221101"
order by fee desc, c.car_type asc, c.car_id desc