๋ฐ์ดํฐ ๋ถ์ ํจ์
(AGGREGATE FUNCTIONS)
- GROUP FUNCTION์ ํ ๋ถ๋ถ์ด๋ฉฐ, GROUP AGGREGATE FUNCTION์ด๋ผ๊ณ ๋ ๋ถ๋ฅผ ์ ์๋ค.
COUNT,SUM,AVG,MAX,MIN์ธ ๊ฐ์ข ์ง๊ณ ํจ์๋ค์ด ํฌํจ๋์ด ์๋ค.
(GROUP FUNCTIONS)
- ๊ทธ๋ฃนํจ์๋ก๋ ์ง๊ณ ํจ์ ์ ์ธํ๋ฉด, ROLLUPํจ์, CUBE ํจ์, GROUPING SETS ํจ์๊ฐ ์๋ค.
- ROLLUP์ GROUP BY์ ํ์ฅ๋ ํํ๋ก ๋ณ๋ ฌ๋ก ์ํ์ด ๊ฐ๋ฅ. (๊ณ์ธต์ ๋ถ๋ฅ๋ฅผ ํฌํจํ๊ณ ์๋ ๋ฐ์ดํฐ ์ง๊ณ์ ์ ํฉ)
- CUBE ๋ ๊ฒฐํฉ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ ๋ํ์ฌ ๋ค์ฐจ์์ ์ธ ์ง๊ณ๋ฅผ ์์ฑํ๊ฒ ๋๋ฏ๋ก ROLLUP์ ๋นํด ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ์ป๋ ์ฅ์ ์ด ์์ง๋ง, ์์คํ ์ ๋ถํ๋ฅผ ๋ง์ด ์ฃผ๋ ๋จ์ ์ด ์๋ค.
- GROUPING SETS ๋ ์ํ๋ ๋ถ๋ถ์ ์๊ณ๋ง ์์ฝ๊ฒ ์ถ์ถ๊ฐ๋ฅ.
- ROLLUP, CUBE, GROUPING SETS ์ฌ์ฉ์ ์ ๋ ฌ์ด ํ์ํ ๊ฒฝ์ฐ๋ ORDER BY ์ ์ ์ ๋ ฌ ์นผ๋ผ์ ๋ช ์ํด์ผ ํ๋ค .
(WINDOW FUNCTIONS)
- ๋ถ์ํจ์(ANALYTIC FUNCTION)๋ ์์ํจ์(RANK FUCTION)๋ก๋ ์๋ ค์ ธ ์์.
๊ทธ๋ฃนํจ์(GROUP FUNCTIONS )
1) ROLLUP ํจ์
- GROUP BY ์ ๊ณผ ๊ฐ์ด ์ฌ์ฉ ๋๋ฉฐ, GROUP BY์ ์ ์ํด์ ๊ทธ๋ฃน ์ง์ด์ง ์งํฉ ๊ฒฐ๊ณผ์ ๋ํด์ ์ข ๋ ์์ธํ ์ ๋ณด๋ฅผ ๋ฐํํ๋ ๊ธฐ๋ฅ์ ์ํ ํ๋ค.
- ์ธ์๊ฐ ๊ณ์ธต๊ตฌ์กฐ์ด๋ฏ๋ก ์ธ์ ์์๊ฐ ๋ฐ๋๋ฉด ์ํ ๊ฒฐ๊ณผ๋ ๋ฐ๋๊ฒ ๋๋ฏ๋ก ์ธ์์ ์์์ ์ฃผ์ํด์ผํจ.
์์ 1 ) SELECT DNAME, JOB, COUNT(*) "Total Empl", SUM(SAL) "Total Sal"
FROM EMP, DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
GROUP BY ROLLUP (DNAME, JOB)
์์ 2 ) GROUPING ํจ์ ์ฌ์ฉ
ROLLUP ์ด๋ CUBE์ ์ํ ์๊ณ๊ฐ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ์๋ GROUPING(EXPR) = 1์ด ํ์๋๊ณ ,
๊ทธ ์ธ์ ๊ฒฐ๊ณผ์๋ GROUPING(EXPR) = 0 ์ด ํ์๋๋ค.
SELECT DNAME, GROUPING(DNAME), JOB, GROUPING(JOB), COUNT(*) "Total Empl", SUM(SAL) "Total Sal"
FROM EMP,DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
GROUP BY ROLLUP (DNAME, JOB);
+) ์ด์ธ์๋ CASEํจ์๋ฅผ ํจ๊ป ์ฌ์ฉํ๊ฑฐ๋ GROUP BY์ ์์ ROLLUPํจ์๋ฅผ ํน์ ์์ฑ์๋ง ์ฌ์ฉํ๊ฑฐ๋ ์ฌ๋ฌ ์์ฑ์ ๊ดํธ๋ก ๋ฌถ์ด ํ๋์ ์งํฉ์ผ๋ก ๊ฐ์ฃผํ๋ ๋ฑ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
2) CUBE ํจ์
- ROLLUP์์๋ ๋จ์ง ๊ฐ๋ฅํ Subtotal๋ง์ ์์ฑํ์์ง๋ง, CUBE๋ ๊ฒฐํฉ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ ๋ํ์ฌ ๋ค์ฐจ์ ์ง๊ณ๋ฅผ ์์ฑํ๋ค.
- CUBE๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ๋ด๋ถ์ ์ผ๋ก๋ Grouping Columns์ ์์๋ฅผ ๋ฐ๊พธ์ด์ ๋ ํ๋ฒ์ Query๋ฅผ ์ถ๊ฐ ์ํํด์ผ ํ๋ค.
- ROLLUP์ ๋นํด ์์คํ ์ ๋ง์ ๋ถ๋ด์ ์ฃผ๋ฏ๋ก ์ฌ์ฉ์ ์ฃผ์ํด์ผ ํจ.
- ROLLUP๊ณผ๋ ๋ฌ๋ฆฌ ํ๋ฑํ ๊ด๊ณ์ด๋ฏ๋ก ์ธ์์ ์์๊ฐ ๋ฐ๋๋ ๊ฒฝ์ฐ ํ๊ฐ์ ์ ๋ ฌ ์์๋ ๋ฐ๋ ์ ์์ด๋ ๋ฐ์ดํฐ ๊ฒฐ๊ณผ๋ ๊ฐ๋ค.
์์ 1) CUBE ํจ์ ์ด์ฉ
SELECT
CASE GROUPING(DNAME)
WHEN 1 THEN 'All Departmets'
ELSE DNAME END AS DNAME,
CASE GROUPING(JOB)
WHEN 1 THEN 'All Jobs'
ELSE JOB END AS JOB,
COUNT(*) "Total Empl",
SUM(SAL) "Total Sal",
FROM EMP, DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
GROUP BY CUBE (DNAME, JOB);
3) GROUPING SETS ํจ์
- ๊ณ์ธต ๊ตฌ์กฐ์ธ ROLLUP๊ณผ๋ ๋ฌ๋ฆฌ ํ๋ฑํ ๊ด๊ณ์ด๋ฏ๋ก ์ธ์์ ์์๊ฐ ๋ฐ๋์ด๋ ๊ฒฐ๊ณผ๋ ๊ฐ๋ค.
- GROUP BY SQL ๋ฌธ์ฅ์ ์ฌ๋ฌ๋ฒ ๋ฐ๋ณตํ์ง ์์๋ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ฝ๊ฒ ์ป์ ์ ์๊ฒ ๋จ.
- GROUPING SETS(์ธ์1, ์ธ์2)๋ (์ธ์1 ๊ทธ๋ฃนํ ๊ฒฐ๊ณผ) + (์ธ์2 ๊ทธ๋ฃนํ ๊ฒฐ๊ณผ)๋ฅผ ํฉ์น(UNION ALL) ๊ฒฐ๊ณผ์.
์์ 1)
SELECT
DECODE(GROUPING(DNAME),1,
'All Departments', DNAME) AS DNAME,
DECODE(GROUPING(JOB), 1,
'All Jobs', JOB) AS JOB,
COUNT(*) "Total Empl ",
SUM(SAL) "Total Sal"
FROM EMP, DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
GROUP BY GROUPING SETS (DNAME, JOB);
'SQLD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ณผ๋ชฉII SQL ๊ธฐ๋ณธ ๋ฐ ํ์ฉ 2์ฅ - 7์ DCL (0) | 2021.05.25 |
---|---|
๊ณผ๋ชฉII SQL ๊ธฐ๋ณธ ๋ฐ ํ์ฉ 2์ฅ - 6์ WINDOW FUNCTION (0) | 2021.05.25 |
๊ณผ๋ชฉII SQL ๊ธฐ๋ณธ ๋ฐ ํ์ฉ 2์ฅ - 4์ ์๋ธ์ฟผ๋ฆฌ (0) | 2021.05.25 |
๊ณผ๋ชฉII SQL ๊ธฐ๋ณธ ๋ฐ ํ์ฉ 2์ฅ - 3์ ๊ณ์ธตํ ์ง์์ ์ ํ ์กฐ์ธ (0) | 2021.05.24 |
๊ณผ๋ชฉ II SQL ๊ธฐ๋ณธ ๋ฐ ํ์ฉ 2์ฅ - 2์ ์งํฉ ์ฐ์ฐ์ (0) | 2021.05.24 |