์ผ์์ ์ธ ์ ๋ฌด์์ ์ฟผ๋ฆฌ๋ฅผ ์ง๋ค ๋ณด๋ฉด, ํฉ๊ณ๋ฅผ ๊ตฌํ๊ณ ์ถ์ ๋๊ฐ ์ ๋ง ๋ง๋ค. ์์๋ก DEPT ํ ์ด๋ธ์ ๋ถ์๋ช ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ํด๋น ๋ถ์์ ์ํ ์ฌ์๋ค์ ์ด ๊ธ์ฌ๋ฅผ ๊ตฌํ๋ ค๋ฉด ์ฟผ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ง์ผํ ๊น?
ํ์ฅ GROUP ํจ์๋ฅผ ๋ชจ๋ฅธ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์ ๊ฒ์ด๋ค.
SELECT B.DNAME
, SUM(A.SAL)
FROM EMP A
, DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY B.DNAME
UNION ALL
SELECT NULL
, SUM(A.SAL)
FROM EMP A
ORDER BY 1
;
์ ๋ฐฉ์์ด ํ๋ ธ๋ค๋ ๊ฒ์ ์๋๋ค. ํ์ง๋ง ํ์ฅ GROUP ํจ์๋ฅผ ์ด๋ค๋ฉด ๋ค์์ฒ๋ผ ๊ฐ๋ตํ๊ฒ ํํ ๊ฐ๋ฅํ๋ค.
SELECT B.DNAME
, SUM(A.SAL)
FROM EMP A
, DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY ROLLUP(B.DNAME)
ORDER BY 1
;
์ฝ๋๊ฐ ํจ์ฌ ๊ฐ๊ฒฐํด์ ธ ๋์ ์๋ค์ด์จ๋ค. ์์ ์์์ฒ๋ผ ๊ธฐ์ค์ด ๋๋ ์ปฌ๋ผ์ด ์ ๋ค๋ฉด ๋๊ฐ์ง ๋ฐฉ์ ์ค ์ด๋ค ๋ฐฉ์์ ์ฌ์ฉํ๋ ์ฑ๋ฅ์ ์ผ๋ก๋ ์ฝ๋์ ์ผ๋ก ํฌ๊ฒ ๋ฌธ์ ๋ ๊ฒ์ด ์์ ๊ฒ์ด๋ค. ๋ค์ ์์์ ๊ฐ์ด ๊ธฐ์ค์ด ๋๋ ์ปฌ๋ผ์ด ๋์ด๋ ์๋ก ์์ฑ ๋ฐฉ์์ ๋ฐ๋ผ ์ฐจ์ด๊ฐ ๊ทน๋ช ํ๊ฒ ๋๋ฌ๋ ๊ฒ์ด๋ค.
์์์ ๋น๊ตํ๋ ๋ฐฉ์๋๋ก ๋น๊ตํด๋ณด๋ฉด,
SELECT B.DNAME
, A.JOB
, SUM(A.SAL)
FROM EMP A
, DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY B.DNAME, A.JOB
UNION ALL
SELECT B.DNAME
, NULL
, SUM(A.SAL)
FROM EMP A
, DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY B.DNAME
UNION ALL
SELECT NULL
, NULL
, SUM(A.SAL)
FROM EMP A
ORDER BY 1,2
;
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
;
ํ ๋์ ๋ด๋ ์ฝ๋ ๊ธธ์ด๊ฐ ํ์ฐํ ์ฐจ์ด๋๋ค. ๊ทธ๋ฃนํ์ ํ๋ ๊ธฐ์ค์ด ๋๋ ์ปฌ๋ผ์ด ๋ง์์ง์๋ก ์ฝ๋์ ๊ธธ์ด๋ ๋ ๊ธธ์ด์ง๊ณ ์ฑ๋ฅ๋ฉด์์๋ ๋์ฑ ์ฐจ์ด๊ฐ ์ฌํด์ง ๊ฒ์ด๋ค.
GROUP BY ์ ์ ์ ์ธํ์ฌ ์ฌ์ฉํ๋ ROLLUP() ํจ์๋ ์ธ์๋ก ๋ฐ๋ ๊ธฐ์ค ์ปฌ๋ผ ๋ณ ์ง๊ณ ํจ์ ๊ฐ์ ์ถ๋ ฅ ํ ๋ค, ๋ง์ง๋ง ROW์ ์ ์ฒด ์ง๊ณ ํจ์ ๊ฐ์ ์ถ๊ฐ๋ก ๋ฆฌํดํด์ค๋ค. ์์ ์ฝ๋๋ฅผ ์๋ก ๋ค์ด ์ถ๊ฐ ์ค๋ช ํ์๋ฉด, ์ธ์๋ก ๋ฐ์ ๋ถ์๋ช ์ ๊ธฐ์ค์ผ๋ก ์ ์ธ๋ ์ง๊ณํจ์๋ฅผ ํตํด ๋ถ์๋ณ ์ด ๊ธ์ฌ๋ฅผ ์ถ๋ ฅํ ๋ค(์ฌ๊ธฐ๊น์ง ์ผ๋ฐ GROUP BY์ ๊ฐ๋ค), ์ถ๊ฐ๋ก ์ ์ฒด ์ด ๊ธ์ฌ๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ํด๋น ์ฟผ๋ฆฌ์์ SUM ํจ์๊ฐ ์๋ AVG ํจ์๊ฐ ์ฌ์ฉ๋๋ค๋ฉด, ๋ถ์๋ช ๋ณ ํ๊ท ๊ธ์ฌ๋ฅผ ๋ชจ๋ ์ถ๋ ฅํ๊ณ ์ ์ฒด ๋ถ์์ ํ๊ท ๊ธ์ฌ๊ฐ ์ถ๊ฐ๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ด๋ค.
์ดํด๋ฅผ ๋๊ธฐ ์ํด ๋ค์ ์์๋ฅผ ๋ณด์.
SELECT A
, B
, SUM(C)
FROM TABLE
GROUP BY ROLLUP(A,B)
ORDER BY 1,2
;
A | B | SUM(C) |
A1 | B1 | A1๋ณ B1๋ณ C์ ์ดํฉ |
A1 | B2 | A1๋ณ B2๋ณ C์ ์ดํฉ |
A1 | A1๋ณ C์ ์ดํฉ | |
A2 | B1 | A2๋ณ B1๋ณ C์ ์ดํฉ |
A2 | B2 | A2๋ณ B2๋ณ C์ ์ดํฉ |
A2 | A2๋ณ C์ ์ดํฉ | |
C์ ์ดํฉ |
์ธ์๋ก ๋ฐ๋ ์ปฌ๋ผ์ ์ ๋งํผ ์์ ๊ทธ๋ฃน์ ์ดํฉ์ด ์ถ๊ฐ๋ก ์ถ๋ ฅ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. (์ ์์์ ๊ฒฝ์ฐ ์ธ์๋ก A,B ๋๊ฐ์ ์ปฌ๋ผ์ ์คฌ์ผ๋ A๋ณ ์ดํฉ, ์ ์ฒด ์ดํฉ์ ์ถ๊ฐ๋ก ์ถ๋ ฅํ๋ค.)
๋ง์ฝ ์ ์ฒด ์ดํฉ์ ์ถ๋ ฅํ์ง ์๊ณ ๊ทธ๋ฃนํ๋๋ ์ปฌ๋ผ ์ค ํน์ ์ปฌ๋ผ์ ์ดํฉ๋ง ์ถ๋ ฅํ๊ณ ์ถ๋ค๋ฉด, ์์ ๊ทธ๋ฃน์ ํด๋นํ๋ ์ปฌ๋ผ์ ROLLUP() ํจ์ ๋ฐ๊นฅ์ผ๋ก ๊บผ๋ด์ฃผ๋ฉด ๋๋ค.
SELECT B.DNAME
, A.JOB
, SUM(A.SAL)
FROM EMP A
, DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY B.DNAME, ROLLUP(A.JOB)
ORDER BY 1,2
;
๋ถ์ ๋ณ ์ง์ ์ ์ดํฉ๋ง ๊ตฌํ๊ณ ์ถ๊ณ ์ ์ฒด ๋ถ์ ์ดํฉ์ ๊ตฌํ๊ณ ์ถ์ง ์์ ๋, ROLLUP() ํจ์์ ์ธ์๋ก ์๋ DNAME์ ๋ฐ์ผ๋ก ๋นผ์ ๋ฐ๋ก ๊ทธ๋ฃจํํด์ฃผ๋ฉด ์์ ๊ฐ์ด ์ ์ฒด ๋ถ์์ ์ดํฉ์ด ์์ด ๋ถ์ ๋ณ ์ ์ฒด ์ง์ ์ ์ดํฉ๋ง ์ถ๊ฐ๋ก ์ถ๋ ฅํ ์ ์๋ค.
ํ์ฅ GROUP ํจ์๋ ํ์๋ ์๋์ง๋ง ์์๋๋ฉด ๊ต์ฅํ ์ ์ฉํ๊ฒ ์ธ ์ ์๋ ํจ์์ด๋ค. ๋จ์ํ ์ํ๋ ๊ฐ์ ์ ์ฝ๊ฒ ์ป์ ์ ์๋ค๋ ๊ฒ์ ๋ ๋์ ์ฑ๋ฅ์ ์ธ ์ธก๋ฉด์์๋ ๋ง์ ๋์์ ์ค๋ค. ์์์ ๋น๊ตํ๋ ์ฝ๋๋ฅผ ์ค๋ผํด ์ฑ๋ฅ ๋ถ์ ํ๋ฅผ ํตํด ์์ธํ ๋น๊ตํด๋ณด๋ฉด ๋ ์ฒด๊ฐ์ด ๋๋ค.
์ฌ๊ธฐ์ ์ค์ํ๊ฒ ๋ณผ ๋ถ๋ถ์ Elapsed Time๊ณผ Query ์ปฌ๋ผ์ด๋ค. Elapsed Time์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ด๊ณ , Query๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ๊น์ง ์์คํ ์ด ๋๋ฆฐ ์ฟผ๋ฆฌ์ ํ์์ด๋ค. ๋ฐ์ดํฐ๊ฐ ์ ๊ณ ERD ๊ท๋ชจ๊ฐ ์ ์ ํ๊ฒฝ์์ ํ ์คํธํด๋ณด์๋๋ฐ๋ ๋ถ๊ตฌํ๊ณ ํ ๋์ ๋ด๋ ์ฐจ์ด๊ฐ ๋๋ ๊ฒ์ด ๋ณด์ธ๋ค. ์ด๋ฐ ์ฐจ์ด๋ ์ค๋ฌด์์ ๋ฐฉ๋ํ ๊ท๋ชจ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฌ๋ค๋ฉด ๋ ๋๋ ทํ๊ฒ ๋ณด์ผ ๊ฒ์ด๋ค.
๋ณธ์ธ์ด ์๊ท๋ชจ ํ๋ก์ ํธ๋ง ์งํํ๊ณ ๋น์ฅ ๊ธํ๊ฒ ์ฟผ๋ฆฌ๋ฅผ ์ง์ผํ๋ ์ํฉ์ด๋ผ๋ฉด ์ด๋ฐ ์ฑ๋ฅํ๊น์ง ๋น๊ต๋ถ์ํ๋ฉด์ ์ฟผ๋ฆฌ๋ฅผ ์งค ํ์๋ ์์ ๊ฒ์ด๋ค(๊ฒฐ๊ณผ๊ฐ ์๋์ค๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ๋๊น). ํ์ง๋ง ๋ง๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ํฐ ๊ท๋ชจ์ ํ๋ก์ ํธ์์ ์ฟผ๋ฆฌ๋ฅผ ์ง ๋ค๊ฑฐ๋, ํ๋์ ์ ๋ฌด๋ฅผ ๋งก๊ฒ ๋์๋ค๋ฉด ์ด๋ฐ ์ฑ๋ฅ ๋ถ์์ ํตํด ์ต๋ํ ๋ฉ๋ชจ๋ฆฌ ์๋ชจ๋ฅผ ์ ๊ฒํ๋ ์ฝ๋ ๋ฐฉ์์ ๊ณ ๋ฏผํด ๋ณผ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค.
'๊ฐ๋ฐ์ผ๊ธฐ ๐ป' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Oracle] ํ์ฅ GROUP ํจ์ - CUBE() (0) | 2023.12.06 |
---|---|
[Oracle] ํ์ฅ GROUP ํจ์ - GROUPING SETS() (2) | 2023.12.06 |
[Eclipse] Dynamic Web Module version ํ์ธ/์์ ํ๊ธฐ (0) | 2023.11.30 |
[JSP] JAVA๋ก ์ฐ์ฒด๊ตญ Open API ๋ณตํธํ/์ํธํ ํ๋ฉด ๋์ฐ๊ธฐ (0) | 2023.11.30 |
[Eclipse] ํญ์ ์คํ์ด์ค๋ก ๋ฐ๊พธ๊ธฐ (0) | 2023.11.16 |