๋์ ํฉ๊ณ ๊ตฌํ๊ธฐ
EMPํ ์ด๋ธ์์ ์ฌ์์ ์ ๋ณด์ ๋ถ์๋ฒํธ๋ก ์ ๋ ฌ๋์ด ์์๋ ๊ธ์ฌ์ ๋์ ํฉ๊ณ๋ ๊ฐ์ด ์ถ๋ ฅํด๋ผ.
ORACLE SCOTT ๊ณ์ ์ผ๋ก ์ค์ต์ ์งํํฉ๋๋ค.
1
2
3
4
5
6
7
8
9
10
|
SELECT
DEPTNO
,EMPNO
,ENAME
,SAL
,SUM(SAL) OVER(
ORDER BY DEPTNO
ROWS UNBOUNDED PRECEDING
) AS SUM_SAL
FROM EMP;
|
1
2
3
4
5
6
7
8
9
10
11
|
SELECT
DEPTNO
,EMPNO
,ENAME
,SAL
,SUM(SAL) OVER(
ORDER BY DEPTNO
ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW
) AS SUM_SAL
FROM EMP;
|
๋์ ํฉ๊ณ๋ฅผ ๊ตฌํ๊ธฐ ์ํด ๋ถ์ํจ์ OVER์ ์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ORDER BY ์ ๋ค๋ก WINDOWING ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค. WINDOWING์ ์์๋ ๋ถ์ํจ์์ ๋์์ด ๋๋ ํ๋ค์ ๋ฒ์ ์กฐ์ ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋์ ํฉ๊ณ๋ฅผ ๊ตฌํ๊ธฐ ์ํด์๋ ์ฒซ๋ฒ์งธ ํ๋ถํฐ ์ฝ๊ณ ์๋ ํ๊น์ง(ROWS UNBOUNDED PRECEDING)๋ฅผ ๋ถ์ํจ์์ ๋ฒ์ ๋์์ผ๋ก ์ง์ ํ ๊ฒ ์ ๋๋ค.
WINDOWING์ ์์๋ ๋ฌผ๋ฆฌ์ (ROWS), ๋ ผ๋ฆฌ์ (RANGE) ๋ฒ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
WINDOWING ๋ฌผ๋ฆฌ์ ๋ฒ์
๋ฌผ๋ฆฌ์ ๋ฒ์๋ ํ์ ๊ธฐ์ค์ผ๋ก ๋ฒ์๋ฅผ ์ง์ ํ๋ ๊ฒ ์ ๋๋ค. ROWS๋ฅผ ์ฌ์ฉํด์ ํ์ผ๋ก ๋ถํฐ ์ (PRECEDING)๊ณผ ํ(FOLLOWING)์ ๋ฒ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์์ ๋์ ํฉ๊ณ๋ฅผ ๊ตฌํ๋ ์์๋ ๋ฌผ๋ฆฌ์ ๋ฒ์์ WINDOWING์ ๋๋ค.
์ฌ์์ ์ ๋ณด๋ฅผ ๋ถ์ ๋ฒํธ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ ํ์๋ ๋ฐ๋ก ์ ๊ณผ ํ ํ์ ๊ธ์ฌํ๊ท ๊ฐ๊ณผ ํจ๊ป ์ถ๋ ฅํด๋ผ.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SELECT
DEPTNO
,EMPNO
,ENAME
,SAL
,ROUND(
AVG(SAL) OVER(
ORDER BY DEPTNO
ROWS BETWEEN 1 PRECEDING
AND 1 FOLLOWING
)
) AS AVG_SAL
FROM EMP;
|
WINDOWING ๋ ผ๋ฆฌ์ ๋ฒ์
๋ ผ๋ฆฌ์ ๋ฒ์๋ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ฒ์๋ฅผ ์ง์ ํ๋ ๊ฒ ์ ๋๋ค. RANGE๋ฅผ ์ฌ์ฉํด์ ํด๋น ํ์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ (PRECEDING)๊ณผ ํ(FOLLOWING)์ ๋ฒ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด 2๋ฒ์งธ ํ์์ ๊ธ์ฌ 4000์ 1000 PRECEDING๊ณผ 1000 FOLLOWING ๋ฒ์๋ 3000 ~ 5000๊น์ง์ ๊ฐ์ ๋ถ์ํจ์์ ์ ์ฉํ๋ ๊ฒ ์ ๋๋ค.
์ฌ์์ ์ ๋ณด๋ฅผ ๋ถ์ ๋ฒํธ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ ํ์๋ ๊ธฐ์ค ํ์ -1000 ~ 1000์ ํด๋นํ๋ ๊ฐ๋ค์ ๊ธ์ฌํ๊ท ๊ฐ๊ณผ ํจ๊ป ์ถ๋ ฅํด๋ผ.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SELECT
DEPTNO
,EMPNO
,ENAME
,SAL
,ROUND(
AVG(SAL) OVER(
ORDER BY SAL --์ด๋ค ์ปฌ๋ผ์ผ๋ก ์ ๋ ฌํ๋๋์ ๋ฐ๋ผ์ ๋
ผ๋ฆฌ์ ์ธ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค.
RANGE BETWEEN 1000 PRECEDING
AND 1000 FOLLOWING
)
) AS AVG_SAL
FROM EMP;
|
๊ด๋ จ๊ธ ์ฐธ์กฐ
๋ถ์ํจ์๋? ๋ถ์์ OVER
๋๊ธ