π 157339. μλμ°¨ λμ¬ κΈ°λ‘μμ μ₯κΈ°/λ¨κΈ° λμ¬ κ΅¬λΆνκΈ° (SQL)
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
- μ€λ₯:
'SUV'
λ νμ trueλ‘ μΈμλ¨ β λͺ¨λ car_type ν¬ν¨λ¨ - λ μ§ μ‘°κ±΄ λΆμ ν
β λ λ²μ§Έ μλ
FROM (SELECT * FROM ... ) AS j ...
- κ΅¬μ‘°λ§ λ°κΏ¨μ λΏ λ Όλ¦¬μ μ€λ₯ λμΌ
β μΈ λ²μ§Έ μλ
FROM (SELECT c.car_id, c.car_type, c.daily_fee, d.discount_rate FROM ... ) AS j ...
- κ³μ°μ λ§μμ§λ§ μ€μκ° μΆλ ₯ β
ROUND()
νμ car_id
μ€λ³΅ βGROUP BY
νμ
β λ€ λ²μ§Έ μλ
... GROUP BY car_id ...
- WHEREμ μ€λ₯ κ³μλ¨ (
car_type = 'μΈλ¨' OR 'SUV'
λ¬Έμ )
β λ€μ― λ²μ§Έ μλ
WHERE car_type IN ('μΈλ¨', 'SUV') AND h.end_date < '2024-11-01'
- WHERE μ μ€λ₯ μμ μ±κ³΅
- νμ§λ§ ν΅μ¬ 쑰건 λΉ μ§ β 11μ ν λ¬ "λμ¬ λΆκ°ν μ°¨λ"μ μ μΈν΄μΌ ν¨
β μ¬μ― λ²μ§Έ μλ
... AND d.duration_type = '30μΌ μ΄μ'
... AND h.start_date <= '2022-11-01' AND h.end_date >= '2022-11-30'
- λμ¬μ€μΈ μ°¨λλ§ ν¬ν¨λλ μ€λ₯ β μ μΈ μ‘°κ±΄μ΄ μλ ν¬ν¨ μ‘°κ±΄μ΄ λ¨
β μΌκ³± λ²μ§Έ μλ
WHERE car_type IN (...) AND (SELECT car_id FROM ...)
- WHERE μ μ μλΈμΏΌλ¦¬ λ¨λ μ¬μ© β λ€μ€ν μ€λ₯ λ°μ
β μ¬λ λ²μ§Έ μλ
WHERE car_type IN (...) AND NOT EXISTS (SELECT ...)
- μ²μμ 쑰건 λΆμμ νμ (j.car_id μ°λ μλ¨)
β μν λ²μ§Έ μλ (μ±κ³΅)
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()
ν¨μλ‘ μ μ μ²λ¦¬
3. κ΅ν λ° ν¬μΈνΈ μ 리
3.1 SQL WHERE μ μμ λ Όλ¦¬ μ€λ₯ μ£Όμ
'SUV'
λ¨λ μ νμ true βIN ('μΈλ¨', 'SUV')
μ¬μ©ν΄μΌ μ ν
3.2 λ μ§ λ²μ νν°λ§ μ NOT EXISTS
μ¬μ© ν
- κ²ΉμΉλ λ μ§ μ‘°κ±΄μ λΆμ ν΄μ μ μΈν μ°¨λμ μ μν΄μΌ ν¨
- κΈ°κ° κ²ΉμΉ¨ νμΈμ
NOT (end < μμ OR start > μ’ λ£)
λ‘ λΆμ
3.3 GROUP BYλ μ€λ³΅ λ°©μ§μ© μλ
- λ¬Έμ μμ μꡬνμ§ μλ μ΄μ, JOIN κ²°κ³Ό μ€λ³΅ λ°μ μμΈμ λ¨Όμ μ κ²ν κ²
3.4 ROUND ν¨μλ‘ μ€μ μ²λ¦¬
- κ³μ°μ κ²°κ³Όλ μ€μ β
ROUND()
λ‘ μ μ λ³ν νμ
π TMI:
- 볡μ‘ν SQLμΌμλ‘ μ μ§μ μΌλ‘ ν μ€νΈνλ©΄μ WHEREμ 쑰건μ λͺ νν νμ ν΄μΌ ν¨.