
๋ฌธ์
- ํ๋ก๊ทธ๋๋จธ์ค SQL ๋ฌธ์
์๋์ฐจ ํ๊ท ๋์ฌ ๊ธฐ๊ฐ ๊ตฌํ๊ธฐ/๋ ๋ฒจ 2- ๋ฌธ์ ๋ด์ฉ : ํ๋จ ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ๋งํฌ ์ฐธ์กฐ
CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ ์ด๋ธ์์ ํ๊ท ๋์ฌ ๊ธฐ๊ฐ์ด 7์ผ ์ด์์ธ ์๋์ฐจ๋ค์ ์๋์ฐจ ID์ ํ๊ท ๋์ฌ ๊ธฐ๊ฐ(์ปฌ๋ผ๋ช : AVERAGE_DURATION) ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ํ๊ท ๋์ฌ ๊ธฐ๊ฐ์ ์์์ ๋๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผํ๊ณ , ๊ฒฐ๊ณผ๋ ํ๊ท ๋์ฌ ๊ธฐ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ , ํ๊ท ๋์ฌ ๊ธฐ๊ฐ์ด ๊ฐ์ผ๋ฉด ์๋์ฐจ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
๋ด๊ฐ ์์ฑํ Query
SELECT CAR_ID , ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AS AVERAGE_DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY CAR_ID HAVING AVERAGE_DURATION >= 7 ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
- ๐ ๋์ฌ๊ธฐ๊ฐ, ์ฌ์ฉ๊ธฐ๊ฐ ๋ฑ
DATE๋ฅผ ํตํ ์ฐ์ฐ์ ํ๋ ๊ฒฝ์ฐ, ๊ธฐ๊ฐ ๊ฒฝ๊ณ๊ฐ์ ์ ๋ ๊ฐ๋ ํฌํจ์ ํด์ผํ๋ฏ๋ก ์ผ์ ์ฐจ์ด์ +1 ์ ํด์ค๋ค!!- ๐
DATETIMEํ์ ์ฐ์ฐ ์, ๋จ์ํ+,-ํ์ง ์๊ณ ,DATEDIFF์ ๊ฐ์DATE๊ด๋ จ ํจ์๋ฅผ ์ด์ฉํ๋ค! ๊ผญ- ๐ ์ด ๋ฌธ์ ์์, 'END_DATE', 'START_DATE' ์ฐ์ฐ ํ ๋ ๋จ์ํ
-๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ฐ์ด ํ๋ฆฌ๊ฒ ๋์จ๋ค๋ ๊ฑธ ๋ฐฐ์ธ ์ ์์์
'CAR_ID' ๋ณ ํ๊ท ๋์ฌ ๊ธฐ๊ฐ์ ๊ตฌํด์ผ ํ๋ฏ๋ก, GROUP BY ์ด์ฉํ์ฌ 'CAR_ID' ๋ณ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๊ธฐ๋ก ํ๊ณ ์ ๊ทผ
ํ๊ท ๋์ฌ ๊ธฐ๊ฐ์ด 7์ผ ์ด์์ธ ์๋์ฐจ๋ค์ ํํฐ๋ง ํด์ผํ๋ฏ๋ก,
AVG(DATEDIFF(END_DATE, START_DATE)+1) ๋ฅผ ์ด์ฉํ์ฌ ํ๊ท ๋์ฌ ๊ธฐ๊ฐ์ ๊ตฌํด์ค๋ค. ์ด ๋, 'END_DATE'์ 'START_DATE' ์ฌ์ด์ ์ผ์๋ฅผ DATEDIFF ํจ์๋ฅผ ํตํด ๊ตฌํด์ฃผ๊ณ , ์์์ผ๊ณผ ๋ ์ผ์ ์ผ์๋ ํฌํจํด์ผ ํ๋ฏ๋ก +1 ์ ํด์ค๋ค. ์ด ๊ฐ์ AVGํจ์๋ฅผ ์ด์ฉํด ๊ตฌํด์ค๋ค.
ํ๊ท ๋์ฌ ๊ธฐ๊ฐ์ ์์์ ๋ ๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ ํ๋ผ๊ณ ํ์ผ๋ ROUND ํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ ๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ ํด ์ค๋ค. ์ดํ AS๋ฅผ ํ์ฉํ์ฌ ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AS AVERAGE_DURATION ๊ฐ์ 'AVERAGE_DURATION'์ผ๋ก ๋ณ์นญ์ ์ค๋ค.
HAVING์ ์ด์ฉํ์ฌ 'CAR_ID' ๋ณ๋ก ๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ์์ 'AVERAGE_DURATION'์ด 7๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฐ๋ง ํํฐ๋งํ๋ค
ORDER BY๋ฅผ ์ด์ฉํ์ฌ 'AVERAGE_DURATION' ๊ฐ์ด ํฐ ์์๋๋ก ์ถ๋ ฅ, ๊ทธ ๊ฐ์ด ๊ฐ๋ค๋ฉด 'CAR_ID'๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ค.
