GROUP BY
ํน์ ์นผ๋ผ๋ค์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํํ์ฌ ํฉ์ฐ, ํ๊ท , ์ต๊ณ ๊ฐ, ์ต์๊ฐ ๋ฑ์ ์์น๋ฅผ ํ์ธํ๊ธฐ ์ํด GROUP BY ์ ์ ์ด์ฉํฉ๋๋ค. ๋ถ์๋ณ ์ฐ๋ด ํ๊ท , ๋ฐ ์ํ ์ต๊ณ ์ ์, ๋งค์ฅ๋ณ ์ฌ๊ณ ๋๊ณผ ๊ฐ์ด ํ๋์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน์ ์ํฌ๋๋ ํ๊ฐ์ง ๊ฒฐ๊ณผ๋ง ํ์ธํ๋ฉด ๋ฉ๋๋ค. ํ์ง๋ง ๋ ๊ฐ์ง ์ด์์ ๊ธฐ์ค์ผ๋ก GROUP BY ์์ผฐ์๋๋ ํํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํ์ธํ๊ณ ์ถ๋ค๋ ์๊ฐ์ด ๋ค๊ฒ์ ๋๋ค.
๋ถ์๋ณ ํ๋ณ ์ฐ๋ด ํ๊ท , ๋ฐ๋ณ ๊ณผ๋ชฉ๋ณ ์ํ ์ต๊ณ ์ง์, ๋งค์ฅ๋ณ ์นดํ ๊ณ ๋ฆฌ๋ณ ์ฌ๊ณ ๋์ฒ๋ผ 2๊ฐ์ ๊ธฐ์ค์ด ์์๋๋ ๊ฐ๋ก ์ธ๋ก ๊ฐ๊ฐ ๊ธฐ์ค์ผ๋ก ํํํ๋ก ์ถ๋ ฅ๋๋ ๋ฐ์ดํฐ๊ฐ ์ฒ์ ๋ ์ฌ๋์ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ๋ถ์๋ณ ์ง์ ๋ณ ์ฐ๋ด ํฉ์ฐ๊ธ์ก์ ์๊ณ ์ถ๋ค๋ฉด ๊ฐ๋ก์ ๋ถ์, ์ธ๋ก์ ์ง์ ์ ๋์ ํํํ์ ๊ฐ๊ฐ ๊ทธ๋ฃน๋ณ๋ก ๋ฐ๋ก๋ฐ๋ก ๊ทธ๋ฆฌ๊ณ ์ ์ฒด ํฉ์ฐ๋ ์๋์ผ๋ก ๊ตฌํด์ฃผ๋ฉด ์ข๊ฒ ๋ค๋ ์๊ฐ์ด ๋ฐ๋ก ๋ค์์๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ค๋ผํด์์๋ ROLLUP, CUBE, GROUPING SETS๋ฅผ ์ด์ฉํด์ ์ ๋ถ ์ถ๋ ฅ ๊ฐ๋ฅํฉ๋๋ค.
์ค๋ผํด HR ๊ณ์ ์ผ๋ก ์์๋ณด๊ฒ ์ต๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
|
SELECT
DEPARTMENT_ID
,JOB_ID
,SUM(SALARY)
FROM
EMPLOYEES
WHERE DEPARTMENT_ID > 80
GROUP BY
DEPARTMENT_ID
,JOB_ID
ORDER BY JOB_ID;
|
์์ ์ฟผ๋ฆฌ์์๋ DEPARTMENT_ID์ JOB_ID ๋ณ๋ก ๊ทธ๋ฃนํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ์ต๋๋ค. ๋๊ฐ์ง ๊ธฐ์ค์ผ๋ก ๋๋ด๊ธฐ ๋๋ฌธ์ ์ค๋ฅธ์ชฝ ํ์ ๊ฐ์ด ๊ฐ๋ก์๋ DEPARTMENT_ID, ์ธ๋ก๋ JOB_ID๊ฐ๊ณผ ๊ฐ ์นธ์๋ ํด๋น ๊ธฐ์ค์ ๋ง๋ ์ฐ๋ด์ ํฉ์ฐ ๊ฐ์ด ๋ค์ด์์ต๋๋ค.
1 : ๊ฐ๊ฐ DEPARTMENT_ID์ ์ฐ๋ด ํฉ์ฐ ๊ฐ
2 : ์ ์ฒด ์ฐ๋ด ํฉ์ฐ ๊ฐ
3 : ๊ฐ๊ฐ JOB_ID์ ์ฐ๋ด ํฉ์ฐ ๊ฐ
ORACLE์์๋ GROUPING BY ์ ๊ณผ ํจ๊ป ROLLUP, CUBE, GROUPING SETS๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ด๋ฏธ์ง์ 1, 2, 3๋ฒ ๊ฐ๋ค๋ ๊ฐ์ด ์ถ๋ ฅํด ์ค ์ ์์ต๋๋ค.
ROLLUP
1 : ๊ฐ๊ฐ DEPARTMENT_ID์ ์ฐ๋ด ํฉ์ฐ ๊ฐ
2 : ์ ์ฒด ์ฐ๋ด ํฉ์ฐ ๊ฐ
ROLLUP์ ์ฌ์ฉํ๋ฉด 1, 2๋ฒ์ ํด๋นํ๋ ๋ด์ฉ์ ํจ๊ป ์ป์ ์ ์์ต๋๋ค. ๊ฐ๊ฐ DEPARTMENT_ID์ ์ฐ๋ด ํฉ์ฐ ๊ฐ๊ณผ ์ ์ฒด ์ฐ๋ด ํฉ์ฐ ๊ฐ์ ์ป์ ์ ์์ต๋๋ค.
1
2
3
4
5
6
7
8
9
|
SELECT
DEPARTMENT_ID
,JOB_ID
,SUM(SALARY)
FROM
EMPLOYEES
WHERE DEPARTMENT_ID > 80
GROUP BY ROLLUP(DEPARTMENT_ID, JOB_ID)
ORDER BY DEPARTMENT_ID;
|
GROUP BY ์ ๋ค์ ROLLUP์ ์ฌ์ฉํด์ฃผ๊ณ ์ธ์๋ก ๊ทธ๋ฃนํํ๋ ์นผ๋ผ์ ์ ํํด์ค๋๋ค. ์ธ์์ ์ฒซ๋ฒ์งธ ์ปฌ๋ผ์ ํฉ์ฐ ๋ด์ฉ๊ณผ ์ ์ฒด ํฉ์ฐ ๋ด์ฉ์ ์ถ๋ ฅํด์ค๋๋ค. ๋ง์ฝ DEPARTMENT_ID์ JOB_ID์ ์ธ์ ์์น๋ฅผ ๋ฐ๊พธ๊ฒ ๋๋ฉด, JOB_ID์ ๋ํ ํฉ์ฐ ๊ธ์ก๊ณผ ์ ์ฒด ํฉ์ฐ ๋ด์ฉ์ด ์ถ๋ ฅ๋์์ ๊ฒ์ ๋๋ค. ROLLUP์ ์ฌ์ฉํ๋ฉด ์ธ์๋ก ๋ฃ์ด์ค ๋งจ ์ ์นผ๋ผ์ ๊ธฐ์ค๊ณผ ์ ์ฒด ๋ฐ์ดํฐ์ ๊ทธ๋ฃนํจ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ค๋๋ค.
CUBE
1 : ๊ฐ๊ฐ DEPARTMENT_ID์ ์ฐ๋ด ํฉ์ฐ ๊ฐ
2 : ์ ์ฒด ์ฐ๋ด ํฉ์ฐ ๊ฐ
3 : ๊ฐ๊ฐ JOB_ID์ ์ฐ๋ด ํฉ์ฐ ๊ฐ
1
2
3
4
5
6
7
8
9
|
SELECT
DEPARTMENT_ID
,JOB_ID
,SUM(SALARY)
FROM
EMPLOYEES
WHERE DEPARTMENT_ID > 80
GROUP BY CUBE(JOB_ID, DEPARTMENT_ID)
ORDER BY DEPARTMENT_ID;
|
CUBE๋ฅผ GROUP BY์ ์์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํด์ค๋๋ค.
GROUPING SETS
GROUP BY์ ์ ROLLUP๊ณผ CUBE๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด ๋ดค์ต๋๋ค. ROLLUP์ ๋งจ์ฒ์์ ๋์ค๋ ์ธ์ ์นผ๋ผ๊ณผ ์ ์ฒด๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ๊ทธ๋ฃนํจ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์คฌ๊ณ , CUBE๋ ์ ์ฒด ๊ฒฝ์ฐ์ ์์ ๊ทธ๋ฃนํจ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด ์คฌ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์ ์ฒด๊ฐ์ ๊ฒฐ๊ณผ ์ฆ 3๋ฒ๋ง ๋ณด๊ณ ์ถ๋ค๊ฑฐ๋, 3๋ฒ์ ์ ์ธํ ๋๋จธ์ง๋ฅผ ๋ณด๊ณ ์ถ๋ค๊ฑฐ๋, 1,2,3๋ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์ ํํด์ ์ถ๋ ฅํ๊ณ ์ถ๋ค๋ฉด GROUPING SETS๋ฅผ ์ฌ์ฉํด์ฃผ๋ฉด ๋ฉ๋๋ค.
GROUPING SETS์ ์ธ์๋ก ๊ฐ๊ฐ ์ํ๋ ๊ทธ๋ฃน ๋ฐ์ดํฐ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์๊ดํธ ์์ ๊ทธ๋ฃนํํ ์นผ๋ผ์ ๋จผ์ ๋ฃ์ด์ ํ๋์ ๊ทธ๋ฃน์ ๋ง๋ค์ด์ฃผ๊ณ ํด๋น ๊ทธ๋ฃน์ ๊ฐ๊ฐ ์นผ๋ผ์ ์ด์ฉํด์ ํ์ํ ๋ฐ์ดํฐ๋ง ์ ํํด์ ์ถ๋ ฅ ๊ฐ๋ฅํฉ๋๋ค. "()" ๊ดํธ ๋ฌธ์๋ฅผ ์ด์ฉํ๋ฉด ์ ์ฒด ํจ์ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
GROUPING SETS ์์
1
2
3
4
5
6
7
8
|
SELECT
DEPARTMENT_ID
,JOB_ID
,SUM(SALARY)
FROM
EMPLOYEES
WHERE DEPARTMENT_ID > 80
GROUP BY GROUPING SETS((DEPARTMENT_ID, JOB_ID), ());
|
๊ทธ๋ฃนํํ ์นผ๋ผ์ ๋ํ ์ ์ฒด ํฉ์ฐ ๊ฒฐ๊ณผ๋ง ๋ฐ์์ค๋๋ก ํด๋ดค์ต๋๋ค.
๋๊ธ