GROUP BY
1
2
3
4
5
6
|
SELECT
DEPTNO
,JOB
,SUM(SAL)
FROM EMP
GROUP BY DEPTNO, JOB;
|
ORACLE SCOTT ๊ณ์ ์ EMP ํ ์ด๋ธ์ ์ฌ์ฉํด์ ์ค์ต์ ์งํํ์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ GROUP BY ๋ฌธ์ ๋๋ค. SUM ํจ์๋ฅผ ์ด์ฉํด์ ๊ฐ ๋ถ์๋ณ, ์ง์ ๋ณ ๊ธ์ฌ์ ํฉ์ ๊ตฌํ์ต๋๋ค.
ROLLUP
1
2
3
4
5
6
|
SELECT
DEPTNO
,JOB
,SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO, JOB);
|
์์ GROUP BY์ ์ ROLLUP์ ์ถ๊ฐํ์ต๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ๋ถ์๋ณ, ์ง์ ๋ณ ๋ฟ๋ง์๋๋ผ ์ ์ฒด ๊ธ์ฌ์ ํฉ๊ณผ ๋ถ์๋ณ ๊ธ์ฌ์ ํฉ์ ํจ๊ป ์ถ๋ ฅํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ์๋ฌธ์ด ๋๋๊ฒ ์์ต๋๋ค. ์ ์ฒด ๊ธ์ฌ๋ก๋ ํฉ์ ๊ณ์ฐํด์ฃผ๊ณ ๋ถ์๋ณ๋ก๋ ํฉ์ ๊ตฌํด์ฃผ๋๊ฑด ์ข์๋ฐ... ์ ์ฒด ๊ธ์ฌ์ ํฉ๋ง ๋ณด์ฌ์ฃผ๋๊ฐ, ๋ถ์๋ณ๋ก ํฉ๋ง ๋ณด์ฌ์ฃผ๋๊ฐ ๋ ์ค ํ๋๋ง ์ถ๊ฐํ๊ณ ์ถ์๋ฐ... ๊ทธ๊ฒ ๊ฐ๋ฅํ ๊น์?
์ ์ฒด ๊ธ์ฌ ํฉ๋ง ์ถ๋ ฅ
1
2
3
4
5
6
|
SELECT
DEPTNO
,JOB
,SUM(SAL)
FROM EMP
GROUP BY ROLLUP((DEPTNO, JOB));
|
๊ฐ๋ฅํ๋ค์.
๋ถ์๋ณ ๊ธ์ฌ ํฉ๋ง ์ถ๋ ฅ
1
2
3
4
5
6
|
SELECT
DEPTNO
,JOB
,SUM(SAL)
FROM EMP
GROUP BY DEPTNO, ROLLUP(JOB);
|
๋ถ์๋ณ ๊ธ์ฌ ํฉ๋ง ์ถ๋ ฅํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค์. ๊ทธ๋ผ ๋๋ฐ์ฒด ROLLUP์ด ์ด๋ป๊ฒ ๋ฌด์จ ์๋ฆฌ๋ก ์ด๋ ๊ฒ ๊ฐ๋ฅํ๊ฑธ๊น์?
ROLLUP์ ์๋ฆฌ
์ ์ด๋ฏธ์ง๊ฐ ROLLUP์ ์๋ฆฌ๋ฅผ ์ ๋ถ ์ค๋ช ํด์ค๋๋ค. ๊ฐ ๋ฒํธ๋ ํด๋น ์นผ๋ผ์ผ๋ก GROUP BY๋ฅผ ํ ๊ฒฐ๊ณผ๋ฅผ ์ค๋ค๋ ๋ป์ ๋๋ค. ์ฒซ๋ฒ์งธ GROUP BY์ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ด 4๊ฐ์ GROUP์ ๋ง๋ ๋ค๋ ๋ป ์ ๋๋ค. ROLLUP์ ์๋์ ๊ฐ์ ์๋ฆฌ๋ก ์คํ๋ฉ๋๋ค.
1. ROLLUP์ ์ธ์๋ก ๋ค์ด์จ ์นผ๋ผ์ ์ค๋ฅธ์ชฝ๋ถํฐ ํ๋์ฉ ๋นผ๋ฉด์ GROUP์ ๋ง๋ญ๋๋ค.
2. "()"์ ์๋ฏธ๋ GROUP์ด ์๋ ์ฆ, ์ ์ฒด์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค๋ ๋ป ์ ๋๋ค. EX(SUM ํจ์ ์ฌ์ฉํ๋ฉด ์ ์ฒด SUM ๊ตฌํ๋ค๋ ๋ป)
3. ๊ดํธ๋ก ๋ฌถ์ฌ์ ธ ์๋ ์ปฌ๋ผ์ ํ๋๋ก ๋ณธ๋ค๋ ๋ป ์ ๋๋ค.
4. ROLLUP ์ด์ ์ ์ผ๋ฐ ์ปฌ๋ผ๊ณผ GROUP BY ํ๋ค๋ฉด, ์ผ๋ฐ ์ปฌ๋ผ์ ๋๊น์ง ๋จ์ต๋๋ค.
GROUP BY ROLLUP(A, B, C) ์์
1
2
3
4
5
6
7
|
SELECT
DEPTNO
,JOB
,ENAME
,SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO,JOB,ENAME);
|
GROUP BY ROLLUP(A, (B, C)) ์์
1
2
3
4
5
6
7
|
SELECT
DEPTNO
,JOB
,ENAME
,SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO,(JOB,ENAME));
|
GROUP BY A, ROLLUP((B, C)) ์์
1
2
3
4
5
6
7
|
SELECT
DEPTNO
,JOB
,ENAME
,SUM(SAL)
FROM EMP
GROUP BY DEPTNO,ROLLUP((JOB,ENAME));
|
ROLLUP ํน์ด ์์
์ฌํ๊น์ง๋ ๊ธฐ๋ณธ์ ์ผ๋ก ROLLUP์ด ์ด๋ค ์๋ฆฌ๋ก ์คํ๋๋์ง ์์๋ดค์ต๋๋ค. ๊ทธ๋ผ ์์ ์์ ์ฒ๋ผ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ์ ์์๊น์? ์ผ๋จ, ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋, ํ ์นผ๋ผ์์ ์ปฌ๋ผ ์ด์ธ์ ๊ฐ์ด ๋์ค๊ธฐ๋ํ๊ณ , ๊ธ์ฌ ์ปฌ๋ผ์์๋ ํ๊ท ๊ฐ๊ณผ ํฉ๊ณ๊ฐ์ด ๊ฐ์ด ๋์ค๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ด๋ป๊ฒ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ ๊ฒ ์ถ๋ ฅํ ์ ์์๊น์? ์ฐ์ GROUPING, GROUPING_ID ๊ทธ๋ฆฌ๊ณ ์ซ์ GROUP ์ถ๊ฐ์ ๋ํ ๋ด์ฉ์ ์์์ผํฉ๋๋ค.
GROUPING
1
2
3
4
5
6
7
8
|
SELECT
DEPTNO
,GROUPING(DEPTNO) AS DG
,JOB
,GROUPING(JOB) AS JG
,SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO, JOB);
|
![](https://blog.kakaocdn.net/dn/ZfFRA/btqCWMd9Ufs/yQ12rIkNi6W30S88MJaRyk/img.png)
GROUPING ํจ์๋ ROLLUP์ด๋ ๊ฐ์ด ์ฌ์ฉํฉ๋๋ค. ํด๋น ์นผ๋ผ์ด ROLLUP ๋์์ ๋ ๊ทธ๋ฃน์์ ๋น ์ ธ์๋ค๋ฉด 1์ ๋ฐํํฉ๋๋ค. ์ฆ, GROUP BY ROLLUP ๊ฒฐ๊ณผ๋ก NULL์ด ๋์์ ๋ 1์ ๋ฐํํฉ๋๋ค.
GROUPING_ID
1
2
3
4
5
6
7
8
9
|
SELECT
DEPTNO
,JOB
,GROUPING(DEPTNO) AS DG
,GROUPING(JOB) AS JG
,GROUPING_ID(DEPTNO, JOB) GI
,SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO, JOB);
|
GROUPING_ID ํจ์๋ ์ธ์๋ก ๋ค์ด์จ ๊ฐ๊ฐ ์นผ๋ผ์ GROUPING ํจ์ ๊ฐ์ 2์ง์๋ก ํฉ์ณ ํด๋น 2์ง์ ๊ฐ์ 10์ง์๋ก ๋ณํํ ๊ฐ์ ๋ฐํํด์ค๋๋ค.
์ซ์ GROUP
1
2
3
4
5
6
|
ELECT
DEPTNO
,JOB
,SUM(SAL)
FROM EMP
GROUP BY ROLLUP(1,DEPTNO, JOB);
|
์ซ์๊ฐ ๋ค์ด๊ฐ ROLLUP์ ๋ญ๊น์? ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ๋ง์ง๋ง 2๊ฐ์ ์ค์ด ๊ฐ์ ๊ฐ์ด ๋์์ต๋๋ค. ํท๊ฐ๋ฆด ์ ์์ง๋ง ROLLUP์ ์๋ฆฌ๋ฅผ ์๊ฐํด๋ณด๋ฉด ๋ณ ๋ค๋ฅผ๊ฒ ์์ต๋๋ค. JOB๊ณผ DEPTNO๊ฐ ROLLUP์์ ๋น ์ง๊ณ 1๋ง ๋จ์์๋ SUM(SAL)์ ๊ตฌํ๋ ค๊ณ ํฉ๋๋ค. ์์์ ๋ํ GROUP์ ์์ต๋๋ค. ์ฆ, ์ ์ฒด ํ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ผ๋ ์๋ฏธ์ ๊ฐ์ต๋๋ค.
GROUPING, GROUPING_ID, ์ซ์ GROUP ์ข ํฉ
1
2
3
4
5
6
7
8
9
10
11
|
SELECT
DEPTNO
,JOB
,GROUPING(1) AS "1"
,GROUPING(DEPTNO) AS "D"
,GROUPING(2) AS "2"
,GROUPING(JOB) AS "J"
,GROUPING_ID(1, DEPTNO, 2, JOB) AS ID
,SUM(SAL)
FROM EMP
GROUP BY ROLLUP(1,DEPTNO, 2, JOB);
|
GROUPING, GROUPING_ID, ์ซ์ GROUP ๋ชจ๋ ๊ฐ์ด ์ฌ์ฉํ์ต๋๋ค. ํ ํ ์ด๋ธ์ ๋๊ณ ๋ณด๋๊น ์ดํด๊ฐ ๊ฐ์๋์? ์ซ์๊ฐ ROLLUP์ ์จ๋ค๊ณ ํด๋ ROLLUP์ ์๋ฆฌ๋ฅผ ์๋ค๋ฉด ํฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ๊ทธ๋ฅ ๋จ์์๋ ์นผ๋ผ๋ค๋ก GROUP BYํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด์ฃผ๊ณ ์๋ฆฌ๋๋ก ์งํํฉ๋๋ค.
์ต์ข ํ์ด
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
SELECT
DECODE(
GROUPING_ID(1, DEPTNO, 2, JOB)
,7, '์ ์ฒด'
,15, '์ ์ฒด'
,DEPTNO
) AS DEPTNO
,DECODE(
GROUPING_ID(1, DEPTNO, 2, JOB)
,1, 'ํฉ๊ณ'
,3, 'ํ๊ท '
,7, 'ํฉ๊ณ'
,15, 'ํ๊ท '
,JOB
) AS JOB
,DECODE(
GROUPING_ID(1, DEPTNO, 2, JOB)
,3, ROUND(AVG(SAL))
,15, ROUND(AVG(SAL))
,SUM( SAL)
) AS SAL
FROM EMP
GROUP BY ROLLUP(1,DEPTNO, 2, JOB);
|
๋๊ธ