
๋ฌธ์
- ํ๋ก๊ทธ๋๋จธ์ค SQL ๋ฌธ์
์๋์ฐจ ๋์ฌ ๊ธฐ๋ก ๋ณ ๋์ฌ ๊ธ์ก ๊ตฌํ๊ธฐ/๋ ๋ฒจ 4- ๋ฌธ์ ๋ด์ฉ : ํ๋จ ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ [๋งํฌ]
๋ด๊ฐ ์์ฑํ Query
WITH TEMP_01 AS( SELECT A.HISTORY_ID, DATEDIFF(A.END_DATE, A.START_DATE) + 1 AS DAYS , CASE WHEN DATEDIFF(A.END_DATE, A.START_DATE) + 1 >= 90 THEN '90์ผ ์ด์' WHEN DATEDIFF(A.END_DATE, A.START_DATE) + 1 >= 30 THEN '30์ผ ์ด์' WHEN DATEDIFF(A.END_DATE, A.START_DATE) + 1 >= 7 THEN '7์ผ ์ด์' END AS DURATION , B.CAR_TYPE, B.DAILY_FEE FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY A JOIN CAR_RENTAL_COMPANY_CAR B ON A.CAR_ID = B.CAR_ID WHERE B.CAR_TYPE = 'ํธ๋ญ' ) SELECT A.HISTORY_ID , ROUND((DAILY_FEE * (1-COALESCE(B.DISCOUNT_RATE, 0)/100))*A.DAYS, 0) AS FEE FROM TEMP_01 A LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN B ON A.CAR_TYPE = B.CAR_TYPE AND A.DURATION = B.DURATION_TYPE ORDER BY FEE DESC, HISTORY_ID DESC
์ฐจ๋ ๋์ฌ ์ ๋ณด ํ
์ด๋ธ๊ณผ(CAR_RENTAL_COMPANY_RENTAL_HISTORY), ์ฐจ๋์ ๋ณด ํ
์ด๋ธ (CAR_RENTAL_COMPANY_CAR)์ 'CAR_ID' ๊ธฐ์ค์ผ๋ก JOIN ํด์ค๋ค.
WHERE ์ ์ ์๋์ฐจ ์ข
๋ฅ(CAR_TYPE)๊ฐ 'ํธ๋ญ'์ธ ๋ฐ์ดํฐ๋ง ํํฐ๋งํ๋ค.
DATEDIFF(A.END_DATE, A.START_DATE) + 1์ ์ด์ฉํด ๋์ฌ ์ผ์๋ฅผ ๊ตฌํด์ฃผ๊ณ ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก '90์ผ ์ด์', '30์ผ ์ด์', '7์ผ ์ด์'์ DURATION ์ ๋ณด๋ฅผ CASE WHEN THEN์ ์ด์ฉํด ๊ตฌํ๋ค.(๋์ฌ์ผ, ๋ฐ๋ฉ์ผ ๋ชจ๋ ๋์ฌ๊ธฐ๊ฐ์ ํฌํจ๋์ด์ผ ํ๋ฏ๋ก, ์ ๊ฒฝ๊ณ๊ฐ ํฌํจํ๊ธฐ ์ํด +1 ํด์ค)
์์์ ๊ตฌํ ํ
์ด๋ธ์ TEMP_01๋ก ๋ง๋ ๋ค.
TEMP_01 ํ
์ด๋ธ๊ณผ ํ ์ธ ์ ๋ณด๊ฐ ํฌํจ๋ CAR_RENTAL_COMPANY_DISCOUNT_PLAN ํ
์ด๋ธ์ CAR_TYPE๊ณผ ์์์ CASE๋ฌธ์ผ๋ก ๊ตฌํ DURATION์ ๊ธฐ์ค์ผ๋ก LEFT JOIN ํด ์ค๋ค.
๐๐๐(์ LEFT JOIN์ธ๊ฐ? : 7์ผ ์ดํ์ ๋์ฌ ๊ธฐ๋ก๋ ๊ตฌํด์ผ ํ๋๊น LEFT JOIN์ด๋ค. CAR_RENTAL_COMPANY_DISCOUNT_PLAN์๋ 7์ผ ์ดํ์ ํ ์ธ์ ๋ณด๋ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฅ JOIN์ ํ ๊ฒฝ์ฐ 7์ผ ์ดํ์ ๋์ฌ๊ธฐ๋ก์ด ํฌํจ๋์ง ์๋๋ค.)
๊ฐ DURATION์ ๋ง๋ ํ ์ธ์จ(DISCOUNT_RATE)๋ฅผ ๋ฐ์ํ ๊ฐ๊ฒฉ์ ๊ตฌํด์ค๋ค.
DAILY_FEE*(1-COALESCE(DISCOUNT_RATE, 0)/100)*DAYS๋ฅผ ํตํด ๊ฐ ํ ์ธ์จ์ ๋ฐ์ํ ์ผ๋ณ ์๊ธ์ ๊ตฌํ๊ณ , ๋์ฌ ์ผ์๋ฅผ ๊ณฑํด์ค๋ค. COALESCE๋ฅผ ์ฌ์ฉํ์๊ธฐ ๋๋ฌธ์ ํ ์ธ์จ์ด ์๋ ๋ฐ์ดํฐ(์ฆ, 7์ผ ๋ฏธ๋ง์ ๋์ฌ๊ธฐ๋ก)๋ ํ ์ธ์ด ์๋ ๊ธ์ก์ ๊ตฌํ๊ฒ ๋๋ค.
์์์ ๊ตฌํ ์ด ์๊ธ ์ปฌ๋ผ์ FEE ์ปฌ๋ผ์ผ๋ก ๋ณ์นญ ์ค๋ค.
ORDER BY๋ฅผ ์ด์ฉํด FEE, HISTORY_ID ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๋ค.
๐๐๐ 1) LEFT JOIN๊ณผ JOIN์ ๋น๊ต,
2) CASE WHEN THEN์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์์,
3) DAFE_DIFF๋ฅผ ํตํด ์ ํํ ๋์ฌ ์ผ์๋ฅผ ๊ตฌํ๋ ๋ฒ
4) COALESCE ํจ์๋ฅผ ํตํด NULL ๊ฐ์ ๋ํ ์ฒ๋ฆฌ
5) TEMP_01 ๋ฑ ์์ ํ
์ด๋ธ์ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ
๋ชจ๋ ๊ฒ์ ๋ฐฐ์ธ ์ ์๋ ๋ฌธ์ ์๋ค. ์ค์์ค์!
