๐ [SQL] 151138 ์๋์ฐจ ๋์ฌ ๊ธฐ๋ก์์ ์ฅ๊ธฐ/๋จ๊ธฐ ๋์ฌ ๊ตฌ๋ถํ๊ธฐ
ํ๋ก๊ทธ๋๋จธ์ค [SQL] ์๋์ฐจ ๋์ฌ ๊ธฐ๋ก์์ ์ฅ๊ธฐ/๋จ๊ธฐ ๋์ฌ ๊ตฌ๋ถํ๊ธฐ
- https://school.programmers.co.kr/learn/courses/30/lessons/151138
1. ๋ฌธ์
car_rental_company_car
,car_rental_company_rental_history
,car_rental_company_discount_plan
ํ ์ด๋ธ ์ ๊ณต- '์ธ๋จ', 'SUV' ์ฐจ์ข ์ค 2022๋ 11์ ํ ๋ฌ ๊ฐ ๋์ฌ ๊ฐ๋ฅํ ์ฐจ๋์ ์ฐพ๊ณ , 30์ผ ์๊ธ ๊ธฐ์ค ์ ๋ ฌ
2. ์คํจํ ์๋
โ ์ค๋ต
SELECT j.car_id, j.car_type, j.daily_fee * ((100 - j.discount_rate)*0.01) * 30 AS fee
FROM (car_rental_company_car c INNER JOIN car_rental_company_discount_plan d ON c.car_type = d.car_type) AS j
INNER JOIN car_rental_company_rental_history h ON j.car_id = h.car_id
WHERE car_type = '์ธ๋จ' OR 'SUV' AND h.end_date < '2024-11-01'
ORDER BY fee DESC, j.car_type, j.car_id DESC
โ ย SQL WHERE ์ ์์ ๋ ผ๋ฆฌ ์ค๋ฅ ์ฃผ์
'SUV'
๋จ๋ ์ ํญ์ true ๋ก ์ธ์๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ car_type์ด ํฌํจ๋๋ค.- โ
IN ('์ธ๋จ', 'SUV')
์ฌ์ฉํด์ผ ์ ํํ๋ค.
โ ๋ ์ง ์กฐ๊ฑด์ ๋ถ์ ํํ๊ฒ ์์ฑํจ
- ๋ ์ง ๋ฒ์ ํํฐ๋ง์ NOT EXISTS ์ฌ์ฉํ๋ค.
- ๊ฒน์น๋ ๋ ์ง ์กฐ๊ฑด์ ๋ถ์ ํด์ ์ ์ธํ ์ฐจ๋์ ์ ์ํด์ผ ํจ
- ๊ธฐ๊ฐ ๊ฒน์นจ ํ์ธ์
NOT (end < ์์ OR start > ์ข ๋ฃ)
๋ก ๋ถ์
โ GROUP BY๋ ์ค๋ณต ๋ฐฉ์ง์ฉ์ด ์๋๋ค.
- ๋ฌธ์ ์์ ์๊ตฌํ์ง ์๋ ์ด์, JOIN ๊ฒฐ๊ณผ ์ค๋ณต ๋ฐ์ ์์ธ์ ๋จผ์ ์ ๊ฒํ ๊ฒ
โ ROUND ํจ์๋ก ์ค์์ฒ๋ฆฌํ๋ค.
- ๊ณ์ฐ์ ๊ฒฐ๊ณผ๋ ์ค์์ด๋ค. โ
ROUND()
๋ก ์ ์ ๋ณํ์ด ํ์ํ๋ค.
3. ์ ๋ต ์ฝ๋
SELECT j.car_id, j.car_type, ROUND(j.daily_fee * ((100 - j.discount_rate)*0.01) * 30) AS fee
FROM (
SELECT c.car_id, c.car_type, c.daily_fee, d.discount_rate
FROM car_rental_company_car c
INNER JOIN car_rental_company_discount_plan d
ON c.car_type = d.car_type AND d.duration_type = '30์ผ ์ด์') AS j
WHERE car_type IN ('์ธ๋จ', 'SUV')
AND NOT EXISTS (
SELECT 1
FROM car_rental_company_rental_history h2
WHERE h2.car_id = j.car_id
AND NOT (h2.end_date < '2022-11-01' OR h2.start_date > '2022-11-30')
)
ORDER BY fee DESC, j.car_type, j.car_id DESC;
- NOT EXISTS ์ ์์ "11์ ํ ๋ฌ์ด๋ผ๋ ๋์ฌ๋ ์ฐจ๋ ์ ์ธ"
- ๋ ์ง ๋ฒ์:
NOT (end < 11์ 1์ผ OR start > 11์ 30์ผ)
โ ๊ฒน์น๋ ๋์ฌ๊ธฐ๊ฐ ํํฐ๋ง - ํ ์ธ ์กฐ๊ฑด:
duration_type = '30์ผ ์ด์'
- ์๊ธ:
ROUND()
ํจ์๋ก ์ ์ ์ฒ๋ฆฌ
๐ TMI:
- ๋ณต์กํ SQL์ผ์๋ก ์ ์ง์ ์ผ๋ก ํ ์คํธํ๋ฉด์ WHERE์ ์กฐ๊ฑด์ ๋ช ํํ ํ์ ํด์ผ ํจ.