๐ 1. ๋ฌธ์ ์ค๋ช
๐ก 2. ์ ๊ทผ๋ฐฉ์
WHERE์ ์ด๋ HAVING ์ ์ฐ์์ด ๋๋ฌด๋๋ฌด ํท๊ฐ๋ฆฐ๋ค.
์ HAVING์ ์ฌ์ฉํ๋๊ฐ?
์ด ๋ฌธ์ ์์๋ ํ๊ท ๋์ฌ ๊ธฐ๊ฐ(AVG)์ ๊ณ์ฐํ ํ ํด๋น ๊ฐ์ด 7 ์ด์์ธ ๊ทธ๋ฃน๋ง ํํฐ๋งํด์ผ ํ๋ค.
ํ๊ท ์ ๊ณ์ฐํ๋ ค๋ฉด ๋จผ์ CAR_ID ๋ณ๋ก ๊ทธ๋ฃนํ๋ฅผ ํด์ผํ๋ค.
์ดํ์ ์กฐ๊ฑด์ ์ ์ฉํ ์ ์๋ ์ ์ด ๋ฐ๋ก HAVING์ด๋ค.
์ฆ, WHERE ์ ๋ก๋ ๊ทธ๋ฃนํ ์ดํ์ ์ง๊ณ ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ HAVING์ ์ฌ์ฉํด์ผ ํ๋ค.
์ธ์ WHERE์ ์ ์จ์ผ ํ๊ณ , ์ธ์ HAVING ์ ์ ์จ์ผ ํ๋์ง ์ ๋ง ํท๊ฐ๋ฆฐ๋ค.
์ด๊ฑด SQL ์ฟผ๋ฆฌ๋ฌธ ์คํ ์์์ ๊ด๋ จ์ด ์๋ค.
FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
HAVING์ GROUP BY ์ดํ ์คํ๋๊ธฐ ๋๋ฌธ์, ์ง๊ณ ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํ ์ ์๋ค.
ํ ๋ง๋๋ก ๋งํ๋ฉด
`WHERE`: ๊ฐ๋ณ ํ์ ๊ธฐ์ค์ผ๋ก ํํฐ๋ง
`HAVING`: ๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ์ ์ง๊ณ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์ค์ผ๋ก ํํฐ๋ง
๋ฐ๋ผ์, ์ด ๋ฌธ์ ์์๋ ํ๊ท ๋์ฌ ๊ธฐ๊ฐ(์ง๊ณ ๊ฒฐ๊ณผ)์ ๊ธฐ์ค์ผ๋ก ํํฐ๋งํ๊ธฐ ์ํด HAVING ์ ์ ์ฌ์ฉํด์ผ ํ๋ค. ๐
โญ 3. ์ ๋ต์ฝ๋
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
`DATEDIFF`ํจ์
DATEDIFF(end_date, start_date)
๋ ๋ ์ง ๊ฐ์ ์ผ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ๋ ํจ์
๋ฐํ๊ฐ์ ์ ์์ด๊ณ ์๊ฐ ์ฐจ์ด๋ ๊ณ ๋ คํ์ง ์๊ณ ๋ ์ง ๊ธฐ์ค์ผ๋ก ๊ณ์ฐํ๋ค.
DATEDIFF์์ +1์ ๋ํ ์ด์ ๋, ๋์ฌ ์์์ผ๊ณผ ์ข ๋ฃ์ผ์ ํฌํจํ์ฌ ์ผ์๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด์์ด๋ค.
์์์ ๊ฐ์ด ํฌํจ๋๋ ์ด์ ๋, ์ฌ๋ฌ ๋์ฌ ๊ธฐ๋ก์ ํ๊ท ํํ ๊ฒฐ๊ณผ๊ฐ ์ ์๊ฐ ์๋ ์ ์๊ธฐ ๋๋ฌธ์ ์์์ ์ด ๋์จ๋ค. ์์ ๋์งธ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผํ๋ ค๋ฉด ROUND() ํจ์์ ๋ ๋ฒ์งธ ์ธ์์ 1์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. ์์์ ๋์งธ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผํด์ ์ฒซ์งธ์๋ฆฌ๊น์ง ๋์จ๋ค.