<GROUP BY์ ์๋์ฐ ํจ์Window Function๋ ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ>
์๋์ฐ ํจ์Window Function๋ 'ํ์ ์กฐ๊ฑด์ ๋ง๊ฒ ๊ตฌ๋ถํด ์ฃผ๋' ํจ์๋ค. ์ด์ฏค ๋งํ๋ฉด ๋น์ ๋จธ๋ฆฟ์์ ๋ ์ค๋ฅธ ๋ฌธ๋ฒ์ด ํ๋ ์์ ๊ฒ์ด๋ค. ๋ง๋ค. GROUP BY. ์ด๊ฒ ์ญ์ ํ์ ์กฐ๊ฑด์ ๋ง๊ฒ ๊ตฌ๋ถํด ์ค๋ค. ๊ทธ๋ฌ๋ฉด ์๋ฌธ์ด ๋ ๋ค. GROUP BY ์ ๊ณผ ๋๋นํด ์๋์ฐ ํจ์๋ ์ด๋ค ์ฐจ์ด์ ์ด ์๊ณ ๊ทธ๋์ ๊ฒฐ๊ตญ ์ด๋ค ์ํฉ์ ์ฌ์ฉ๋๋ ๊ฑธ๊น. ์ด๋ฒ ํฌ์คํธ๋ ์ด์ฒ๋ผ ์ ์ฌํ ๋ฌธ๋งฅ์์ ์ฌ์ฉ๋๋ ๋ ๋ฌธ๋ฒ, GROUP BY ์ ๊ณผ ์๋์ฐ ํจ์์ ์ฐจ์ด์ ๋ํด ํ๊ตฌํด๋ณผ ๊ฒ์ด๋ค.
<'ํ์ ๋ฌถ๋๋ค' ๋ ํ๋์ ๋ํ ์ดํด>
๋ฌธ๋ฒ์ ๋ํด ๋ค๋ฃจ๊ธฐ ์์์ ์ฆ 'ํ์ ๋ฌถ๋๋ค'๋ ํ๋์ ๋ํด ๋จผ์ ์ดํดํ ํ์๊ฐ ์๋ค. ํ์ ๋ฌถ๋๋ค๋ ๊ฒ์ ์ผ์ฐจ์ ์ผ๋ก ํ ์ฌ์ด์ ๊ณตํต์ ์ ์ฐพ๋๋ค๋ ๋ป์ด๋ค. ์๋์ ๊ฐ์ ์์ ํ์ผ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด์.
์ด๋ฆ | ์ฑ๋ณ | ๋์ด |
๊น์์ด | ๋จ | 15 |
์ด๋น | ์ฌ | 17 |
๊น์จ | ์ฌ | 22 |
์ด์ด | ๋จ | 19 |
์ด ์์ ํ์ผ์ 'ํ์ ๋ฌถ์ผ๋ฉด' ์ด๋์ ํฌ์ปค์ค๋ฅผ ๋๋๋์ ๋ฐ๋ผ ์๋์ ๊ฐ์ด ๋ ๊ฐ์ง ๊ฒฐ๊ณผ๋ฌผ์ด ๋์ฌ ์ ์๋ค.
1) ํ์ ํฌ์ปค์ค๋ฅผ ๋๋ ๊ฒฝ์ฐ. ์๋๋ ์ฑ๋ณ ๊ธฐ์ค์ผ๋ก ํ์ ๋ฌถ์ด์ ์ฑ๋ณ ๋ณ ์ต์ฐ์ฅ์๋ฅผ ๊ฐ๊ฐ ์ถ๋ ฅํ ๊ฒฝ์ฐ๋ค.
์ด๋ฆ | ์ฑ๋ณ | ๋์ด |
์ด์ด | ๋จ | 19 |
๊น์จ | ์ฌ | 22 |
2) ์ฐ์ฐํ ๊ฐ์ ํฌ์ปค์ค๋ฅผ ๋๋ ๊ฒฝ์ฐ. ์๋๋ ์ด๋ฆ์ ์ฒซ ๊ธ์, ์ฑ ๊ธฐ์ค์ผ๋ก ํ์ ๋ฌถ์ด์ ์ฑ ๋ณ ๋์ด ์ต๋๊ฐ์ ๊ฐ๊ฐ ์ถ๋ ฅํ ๊ฒฝ์ฐ๋ค.
์ฑ๋ณ | ๋์ด ์ต๋๊ฐ |
๋จ | 19 |
์ฌ | 22 |
๋ ๋ชจ๋ ํฌ์ปค์ค๋ง ๋ค๋ฅด์ง 'ํ์ ๋ฌถ์๋ค'๊ณ ๋ถ๋ฅผ ๋งํ๋ค. ์ด๋ ํ์๋ GROUP BY๋ก ๊ตฌํํ ์ ์์ง๋ง, ์ ์๋ ์ด๋ ต๋ค. GROUP BY๋ ํน์ฑ์ ๋์ผํ ๊ธฐ์ค์ ๊ฐ์ง ๋ก์ฐ๋ค์ ํ๋๋ก 'ํฉ์น๊ณ ' ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ GROUP BY๋ฅผ ๊ฐ์ง ์ฟผ๋ฆฌ์ SELECT ์ ์๋ GROUP BY๋ ์ปฌ๋ผ๊ณผ ํฉ์ณ์ง ๊ฐ๋ค์ ์ฐ์ฐํ๋ ์ง๊ณํจ์๋ฐ์ ์ฌ ์ ์๋ ๊ฒ์ด๋ค. ์ด๋ ์ ์๋ ์๋์ฐ ํจ์๋ก ๊ตฌํ๋ ์ ์๋ค.
<์๋์ฐ ํจ์Window Fuction>
'ํ๊ณผ ํ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ๊ฑฐ๋ ๋น๊ต, ์ฐ์ฐ์ ์ํํ ์ ์๋ ํจ์'๊ฐ ์๋์ฐ ํจ์์ ๋ํ ์ ์๋ค. ์์์ ์์๋ดค๋ฏ์ด GROUP BY๋ ๋์ผํ ๊ธฐ์ค์ ๊ฐ์ง๋ ๋ก์ฐ๋ค์ ๋ค ํฉ์ณ ๋ฒ๋ฆฌ์ง๋ง, ์๋์ฐ ํจ์๋ ๋ณด์กดํด ์ค๋ค. ์ด ๋๋ฌธ์ GROUP BY๋ก ํ์ง ๋ชป ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฃน ๋ด์์ ์์/ ๋น์จ ๋ฝ๊ธฐ, ์ฐ์ฐ์ ๋ง๋ ๊ฒฐ๊ณผ ๋ก์ฐ ์ถ๋ ฅํ๊ธฐ(์ต๋๊ฐ์ ๊ฐ์ง ์ฌ๋์ ์ด๋ฆ์ ๋ถ๋ฌ์จ๋ค๊ฑฐ๋) ๋ฑ.
์๋์ฐ ํจ์๋ ์๋์ ๊ฐ์ ํ์์ผ๋ก ์ฐ์ธ๋ค.
SELECT WINDOW_FUNCTION (ARGUMENTS) OVER
( [PARTITION BY ์ปฌ๋ผ] [ORDER BY ์ปฌ๋ผ] [WINDOWING ์ ] )
FROM ํ
์ด๋ธ๋ช
;
1) WINDOW_FUNCTION : ์๋์ฐ ํจ์
2) ARGUMENTS(์ธ์) : ํจ์์ ๋ฐ๋ผ 0 ~ N๊ฐ ์ธ์๊ฐ ์ง์ ๋ ์ ์๋ค.
3) PARTITION BY ์ : ์ ์ฒด ์งํฉ์ ๊ธฐ์ค์ ์ํด ์๊ทธ๋ฃน์ผ๋ก ๋๋ ์ ์๋ค.
4) ORDER BY ์ : ์ด๋ค ํญ๋ชฉ์ ๋ํด ์์๋ฅผ ์ง์ ํ ์ง order by ์ ์ ๊ธฐ์ ํ๋ค.
5) WINDOWING ์ : WINDOWING ์ ์ ํจ์์ ๋์์ด ๋๋ ํ ๊ธฐ์ค์ ๋ฒ์๋ฅผ ๊ฐ๋ ฅํ๊ฒ ์ง์ ํ ์ ์๋ค.
์ด๋์ WINDOW_FUNCTION์๋ ์ ์ฉ ์๋์ฐ ํจ์ ์ธ์๋ ๋ค์ํ ๊ธฐ์กด ํจ์๋ฅผ ๊ฐ์ ธ๋ค ์ธ ์ ์๋๋ฐ, ์ด ๋ถ๋ถ์ ์ด ํฌ์คํธ์์ ์ ๋ฆฌํ์ง๋ ์๊ณ ์ฐธ๊ณ ํฌ์คํธ ์ค ํด๋น ๋ด์ฉ์ ๋ํด ์ ์ ๋ฆฌํ ํฌ์คํธ๊ฐ ์์ด ์ฌ์ธ์ฉํ๋ค*๋งํฌ๋ SQL ์ ๋ฌธ๊ฐ ๊ฐ์ด๋ 2013 Edition๋ฅผ ์์ฝํ๋ค๊ณ ํ๋ค. ํด๋น ํฌ์คํธ๋ฅผ ์ฐธ์กฐํด ์ฐ๋ฉด, WINDOW_FUNCTION์๋ ๋ค์๊ณผ ๊ฐ์ ํจ์๋ค์ด ์ฌ ์ ์๋ค.
1) ์์ ํจ์: RANK, DENSE_RANK, ROW_NUMBER
2) ์ง๊ณ ํจ์: SUM, MAX, MIN, AVG, COUNT
3) ๋น์จ ํจ์: CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT
์๋์ฐ ํจ์๋ SQL์ ๋ค๋ฅธ ๋ฌธ๋ฒ๋ค๋ณด๋จ ๊ฝค ๋์ด๋๊ฐ ์์ด ์ง์ ์ฅ๋ฒฝ์ด ๋์ง๋ง, ์ผ๋จ ์ตํ๋๊ณ ๋๋ฉด ์ฟผ๋ฆฌ ๋ค์ด์ดํธ์ ๋์์ ์ฃผ๋ ํจ์ ํจ์๋ค. ์๊ฐ ๋ด์ ์ต์ํด์ ธ ๋ณด์.