GROUPING SETS() ํจ์๋ ์ด์ ํฌ์คํ ์์ ๋ค๋ค๋ ROLLUP()๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก GROUP BY ์ ์์ ์ฌ์ฉํ๋ ํจ์์ด๋ฉฐ, ์ธ์๋ก ๋ฐ๋ ์ปฌ๋ผ ๋ณ ์ง๊ณํจ์ ๊ฐ์ ๋ฆฌํดํ๋ ํจ์์ด๋ค.
์์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ณ ์ถ์ ๋, GROUPING SETS ํจ์๋ฅผ ํ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์งค ์ ์๋ค.
SELECT B.DNAME
, SUM(A.SAL)
FROM EMP A
, DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY GROUPING SETS(B.DNAME)
ORDER BY 1
;
๊ทผ๋ฐ ๋ญ๊ฐ ์ด์ํ์ง ์์๊ฐ? ์์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ ์ฝ๊ฒ ์ถ์ถํ๋ ๋ฐฉ๋ฒ์ ์ฐ๋ฆฌ๋ ์๊ณ ์๋ค.
SELECT B.DNAME
, SUM(A.SAL)
FROM EMP A
, DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY B.DNAME
ORDER BY 1
;
GROUP BY ์ ์ ์๋ฌด ํจ์ ์์ด ๊ทธ๋ฅ ๋ถ์๋ช ์ผ๋ก ๊ทธ๋ฃนํ๋ง ํด์ฃผ์ด๋ ์์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ณ , ์ฌ์ง์ด ์ด๊ฒ ๋ณด๊ธฐ๋ ๋ ํธํ๋ค. ๊ทธ๋์ GROUPING SETS() ํจ์๋ ์ธ์๋ฅผ ํ ๊ฐ๋ง ์ฃผ๋ฉด ์ฌ์ฉํ ์ด์ ๊ฐ ์๊ณ , ์ธ์๋ฅผ ๋๊ฐ ์ด์ ์คฌ์ ๋ ๊ทธ ์ง๊ฐ๋ฅผ ๋ฐํํ๋ค.
SELECT B.DNAME
, A.JOB
, SUM(A.SAL)
FROM EMP A
, DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY GROUPING SETS(B.DNAME, A.JOB)
ORDER BY 1,2
;
GROUPING SETS() ํจ์๋ ์ฒซ๋ฒ์งธ๋ก ๋ฐ์ ์ธ์์ ๋ํ ์ง๊ณํจ์ ๊ฐ์ ์ถ๋ ฅํ ๋ค, ๋๋ฒ์งธ๋ก ๋ฐ์ ์ธ์์ ๋ํ ์ง๊ณํจ์ ๊ฐ์ ์ถ๋ ฅํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ธ์๋ฅผ ์ธ๊ฐ ์คฌ์ ๋๋ ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
SELECT B.DNAME
, A.JOB
, A.MGR
, SUM(A.SAL)
FROM EMP A
, DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY GROUPING SETS(B.DNAME, A.JOB, A.MGR)
ORDER BY 1,2,3
;
๋ํ ROLLUP() ํจ์๋ฅผ ์ฌ์ฉํ์ ๋ ์ถ๊ฐ๋ก ์ถ๋ ฅ๋๋ ์ด ํฉ๊ณ์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐ๊ณ ์ถ๋ค๋ฉด ๋น ๊ดํธ๋ฅผ ์ธ์๋ก ์ค์ผ๋ก์จ ํด๋น ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
SELECT B.DNAME
, A.JOB
, A.MGR
, SUM(A.SAL)
FROM EMP A
, DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY GROUPING SETS(B.DNAME, A.JOB, A.MGR, ())
ORDER BY 1,2,3
;
์ด๋ ๋ฏ, GROUPING SETS() ํจ์๋ ์ธ์๋ก ๋ฐ๋ ์ปฌ๋ผ๋ค ๊ฐ๊ฐ์ ์ง๊ณํจ์ ๊ฐ์ ์ถ๋ ฅํ ์ ์๋ค. GROUPING SETS()์ ํ์ฅ GROUP ํจ์ ์ค์ ๊ฐ์ฅ ์ง๊ด์ ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ ํจ์์ฌ์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ํ์ฅ GROUP ํจ์์ด๊ธฐ๋ ํ๋ค. ๋ค๋ฅธ ํ์ฅ GROUP ํจ์๋ก ํํํ ์ ์๋ค๋ฉด GROUPING SETS ํจ์๋ก๋ ํํ ๊ฐ๋ฅํ๋ค.
-- ROLLUP() ํจ์ ์ฌ์ฉ
SELECT B.DNAME
, A.JOB
, SUM(A.SAL)
FROM EMP A
, DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY ROLLUP(B.DNAME, A.JOB)
ORDER BY 1,2
;
-- GROUPING SETS() ํจ์ ์ฌ์ฉ
SELECT B.DNAME
, A.JOB
, SUM(A.SAL)
FROM EMP A
, DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY ROLLUP((B.DNAME, A.JOB), B.DNAME, ())
ORDER BY 1,2
;
ํ์ฅ GROUP ํจ์๋ ํ์๋ ์๋์ง๋ง ์์๋๋ฉด ๊ต์ฅํ ์ ์ฉํ๊ฒ ์ธ ์ ์๋ ํจ์์ด๋ค. ๋จ์ํ ์ํ๋ ๊ฐ์ ์ ์ฝ๊ฒ ์ป์ ์ ์๋ค๋ ๊ฒ์ ๋ ๋์ ์ฑ๋ฅ์ ์ธ ์ธก๋ฉด์์๋ ๋ง์ ๋์์ ์ค๋ค. ๋น์ทํ ์ญํ ์ ํ๋ ROLLUP() ํจ์์ ์ฌ์ฉ ์ ๋ฌด ๋น๊ต๋ฅผ ์ค๋ผํด ์ฑ๋ฅ ๋ถ์ํ๋ฅผ ํตํด ๋ณด๋ฉด ํ์คํ ์ ์ ์๋ค.
์ฌ๊ธฐ์ ์ค์ํ๊ฒ ๋ณผ ๋ถ๋ถ์ Elapsed Time๊ณผ Query ์ปฌ๋ผ์ด๋ค. Elapsed Time์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ด๊ณ , Query๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ๊น์ง ์์คํ
์ด ๋๋ฆฐ ์ฟผ๋ฆฌ์ ํ์์ด๋ค. ๋ฐ์ดํฐ๊ฐ ์ ๊ณ ERD ๊ท๋ชจ๊ฐ ์ ์ ํ๊ฒฝ์์ ํ
์คํธํด๋ณด์๋๋ฐ๋ ๋ถ๊ตฌํ๊ณ ํ ๋์ ๋ด๋ ์ฐจ์ด๊ฐ ๋๋ ๊ฒ์ด ๋ณด์ธ๋ค. ์ด๋ฐ ์ฐจ์ด๋ ์ค๋ฌด์์ ๋ฐฉ๋ํ ๊ท๋ชจ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฌ๋ค๋ฉด ๋ ๋๋ ทํ๊ฒ ๋ณด์ผ ๊ฒ์ด๋ค.
๋ณธ์ธ์ด ์๊ท๋ชจ ํ๋ก์ ํธ๋ง ์งํํ๊ณ ๋น์ฅ ๊ธํ๊ฒ ์ฟผ๋ฆฌ๋ฅผ ์ง์ผํ๋ ์ํฉ์ด๋ผ๋ฉด ์ด๋ฐ ์ฑ๋ฅํ๊น์ง ๋น๊ต๋ถ์ํ๋ฉด์ ์ฟผ๋ฆฌ๋ฅผ ์งค ํ์๋ ์์ ๊ฒ์ด๋ค(๊ฒฐ๊ณผ๊ฐ ์๋์ค๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ๋๊น). ํ์ง๋ง ๋ง๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ํฐ ๊ท๋ชจ์ ํ๋ก์ ํธ์์ ์ฟผ๋ฆฌ๋ฅผ ์ง ๋ค๊ฑฐ๋, ํ๋์ ์
๋ฌด๋ฅผ ๋งก๊ฒ ๋์๋ค๋ฉด ์ด๋ฐ ์ฑ๋ฅ ๋ถ์์ ํตํด ์ต๋ํ ๋ฉ๋ชจ๋ฆฌ ์๋ชจ๋ฅผ ์ ๊ฒํ๋ ์ฝ๋ ๋ฐฉ์์ ๊ณ ๋ฏผํด ๋ณผ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค.
'๊ฐ๋ฐ์ผ๊ธฐ ๐ป' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Oracle] ํ์ฅ GROUP ํจ์ - GROUPPING() (2) | 2023.12.06 |
---|---|
[Oracle] ํ์ฅ GROUP ํจ์ - CUBE() (0) | 2023.12.06 |
[Oracle] ํ์ฅ GROUP ํจ์ - ROLLUP() (0) | 2023.12.05 |
[Eclipse] Dynamic Web Module version ํ์ธ/์์ ํ๊ธฐ (0) | 2023.11.30 |
[JSP] JAVA๋ก ์ฐ์ฒด๊ตญ Open API ๋ณตํธํ/์ํธํ ํ๋ฉด ๋์ฐ๊ธฐ (0) | 2023.11.30 |