๊ทธ๋ฃน ๊ด๋ จ ํจ์
ROLLUP(์ธ์1, ์ธ์2, ...) | ๊ทธ๋ฃน ๊ธฐ์ค์ผ๋ก ์ง๊ณํ ์ ๋ณด๋ฅผ ๋ ๋ฒจ๋ณ๋ก ์ถ๋ ฅํ๋ ํจ์ |
CUBE(์ธ์1, ์ธ์2, ...) | ๊ทธ๋ฃน ๊ธฐ์ค์ผ๋ก ์ง๊ณํ ์ ๋ณด๋ฅผ ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ๋ณ๋ก ์ถ๋ ฅํ๋ ํจ์ |
GROUPING SETS(์ธ์1, ์ธ์2, ...) | ๊ทธ๋ฃน ์ปฌ๋ผ์ด ์ฌ๋ฌ ๊ฐ ์ผ ๋, ์ง๊ณํ ์ ๋ณด๋ฅผ ์ปฌ๋ผ๋ณ๋ก ์ถ๋ ฅํ๋ ํจ์ |
GROUPING() | ๊ทธ๋ฃนํํ ์ปฌ๋ผ๋ค์ ๋ํด ๊ทธ๋ฃนํ๋ ์ฌ๋ถ๋ฅผ ์ถ๋ ฅํ๋ ํจ์
- ๊ทธ๋ฃนํ O : ์ถ๋ ฅ ๊ฒฐ๊ณผ 0
- ๊ทธ๋ฃนํ X : ์ถ๋ ฅ ๊ฒฐ๊ณผ 1 |
LISTAGG( ๋์ดํ ์ปฌ๋ผ, [๊ตฌ๋ถ์] ) | ( LIST + Aggregate : ๋ชฉ๋ก + ๊ฒฐํฉ )
๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ์ด์ ๋ชฉ๋ก์ผ๋ก ๋์ดํ์ฌ ์ถ๋ ฅํ๋ ํจ์ |
PIVOT() | ๊ทธ๋ฃนํํ ํ ๋ฐ์ดํฐ๋ฅผ ์ด๋ก ๋ฐ๊พธ์ด์ ์ถ๋ ฅํ๋ ํจ์ |
UNPIVOT() | ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ์ธ ์ด์ ํ ๋ฐ์ดํฐ๋ก ๋ฐ๊พธ์ด์ ์ถ๋ ฅํ๋ ํจ์ |
๊ทธ๋ฃน๊ด๋ จ ํจ์ ๊ตฌ์กฐ
SELECT ...
FROM ...
WHERE ...
GROUP BY ๊ทธ๋ฃน๊ด๋ จํจ์[ ROLLUP | CUBE | ... ]
SQL
๋ณต์ฌ
PIVOT()
(
SELECT ์ปฌ๋ผ1, ์ปฌ๋ผ2, ์ปฌ๋ผ3
FROM ํ
์ด๋ธ๋ช
)
PIVOT (
๊ทธ๋ฃนํจ์( ์ปฌ๋ด๋ช
)
FOR ํผ๋ฒํ ์ปฌ๋ผ IN ( ๊ฐ1, ๊ฐ2, ๊ฐ3, ... )
)
SQL
๋ณต์ฌ
UNPIVOT()
UNPIVOT (
๊ธฐ์ค์ปฌ๋ผ
FOR ํผ๋ฒํ ์ปฌ๋ผ IN (์ด1, ์ด2, ์ด3, ... )
)
SQL
๋ณต์ฌ
HR ์คํค๋ง ์ค์ต์ฝ๋
ROLLUP
๊ทธ๋ฃน ๊ธฐ์ค์ผ๋ก ์ง๊ณํ ์ ๋ณด๋ฅผ ๋ ๋ฒจ๋ณ๋ก ์ถ๋ ฅํ๋ ํจ์
ROLLUP(์ธ์1, ์ธ์2, ...)
SQL
๋ณต์ฌ
โข
๋ถ์๋ณ, ์ง๊ธ๋ณ ๊ธ์ฌ ์ต๋๊ฐ, ํฉ๊ณ, ํ๊ท
โข
ROLLUP ๋ฏธ์ฌ์ฉ
SELECT dept_code, job_code
,COUNT(*), MAX(salary), SUM(salary), TRUNC( AVG(salary), 2)
FROM employee
GROUP BY dept_code, job_code
ORDER BY dept_code, job_code
;
SQL
๋ณต์ฌ
โข
ROLLUP ์ฌ์ฉ
: ๊ทธ๋ฃน ๊ธฐ์ค์ผ๋ก ์ง๊ณํ ๊ฒฐ๊ณผ์ ์ถ๊ฐ์ ์ผ๋ก ์ด ์ง๊ณ ์ ๋ณด ์ถ๋ ฅํ๋ ํจ์
SELECT dept_code, job_code
,COUNT(*), MAX(salary), SUM(salary), TRUNC( AVG(salary), 2)
FROM employee
WHERE dept_code IS NOT NULL
AND job_code IS NOT NULL
GROUP BY ROLLUP(dept_code, job_code)
ORDER BY dept_code, job_code
;
SQL
๋ณต์ฌ
CUBE
๊ทธ๋ฃน ๊ธฐ์ค์ผ๋ก ์ง๊ณํ ์ ๋ณด๋ฅผ ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ๋ณ๋ก ์ถ๋ ฅํ๋ ํจ์
CUBE(์ธ์1, ์ธ์2, ...)
SQL
๋ณต์ฌ
SELECT dept_code, job_code
,COUNT(*), MAX(salary), SUM(salary), TRUNC( AVG(salary), 2)
FROM employee
WHERE dept_code IS NOT NULL
AND job_code IS NOT NULL
GROUP BY CUBE(dept_code, job_code)
ORDER BY dept_code, job_code
;
SQL
๋ณต์ฌ
GROUPING SETS()
๊ทธ๋ฃน์ปฌ๋ผ์ด ์ฌ๋ฌ ๊ฐ ์ผ ๋, ์ง๊ณํ ์ ๋ณด๋ฅผ ์ปฌ๋ผ๋ณ๋ก ์ถ๋ ฅํ๋ ํจ์
GROUPING SETS(์ธ์1, ์ธ์2, ...)
SQL
๋ณต์ฌ
โข
๊ฐ๊ฐ ๋ถ์๋ณ, ์ง๊ธ๋ณ ๋ณ๋๋ก ์ธ์ ์
SELECT dept_code, job_code, COUNT(*)
FROM employee
GROUP BY GROUPING SETS( (dept_code), (job_code) )
ORDER BY dept_code, job_code
;
SQL
๋ณต์ฌ
โข
ํน์ ๋ถ์์ ์ง๊ธ๋ณ ์ธ์ ์
SELECT dept_code, job_code, COUNT(*)
FROM employee
GROUP BY dept_code, job_code
ORDER BY dept_code, job_code
;
SQL
๋ณต์ฌ
GROUPING
๊ทธ๋ฃนํํ ์ปฌ๋ผ๋ค์ ๋ํด ๊ทธ๋ฃนํ๋ ์ฌ๋ถ๋ฅผ ์ถ๋ ฅํ๋ ํจ์
GROUPING()
SQL
๋ณต์ฌ
โข
๊ทธ๋ฃนํ O : ์ถ๋ ฅ ๊ฒฐ๊ณผ 0
โข
๊ทธ๋ฃนํ X : ์ถ๋ ฅ ๊ฒฐ๊ณผ 1
SELECT dept_code
, job_code
, COUNT(*)
, MAX(salary)
, SUM(salary)
, TRUNC( AVG(salary), 2)
, GROUPING(dept_code) "๋ถ์์ฝ๋ ๊ทธ๋ฃน์ฌ๋ถ"
, GROUPING(job_code) "์ง๊ธ์ฝ๋ ๊ทธ๋ฃน์ฌ๋ถ"
FROM employee
WHERE dept_code IS NOT NULL
AND job_code IS NOT NULL
GROUP BY CUBE(dept_code, job_code)
ORDER BY dept_code, job_code
;
SQL
๋ณต์ฌ
LISTAGG
๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ์ด์ ๋ชฉ๋ก์ผ๋ก ๋์ดํ์ฌ ์ถ๋ ฅํ๋ ํจ์
LISTAGG( ๋์ดํ ์ปฌ๋ผ, [๊ตฌ๋ถ์] )
WITHIN GROUP (ORDER BY ์ ๋ ฌ๊ธฐ์ค ์ปฌ๋ผ)
SQL
๋ณต์ฌ
LISTAGG : LIST + Aggregate : ๋ชฉ๋ก + ๊ฒฐํฉ
SELECT dept_code ๋ถ์์ฝ๋
,LISTAGG( emp_name, ', ')
WITHIN GROUP(ORDER BY emp_name) "๋ถ์๋ณ ์ฌ์์ด๋ฆ๋ชฉ๋ก"
FROM employee
GROUP BY dept_code
ORDER BY dept_code
;
SQL
๋ณต์ฌ
PIVOT
โข
์ง๊ธ์ ํ์ ํ์, ๋ถ์๋ ์ด์ ๊ทธ๋ฃนํํ์ฌ ์ต๊ณ ๊ธ์ฌ๋ฅผ ์ถ๋ ฅํ์์ค.
SELECT *
FROM (
SELECT dept_code, job_code, salary
FROM employee
)
PIVOT (
MAX(salary)
-- ์ด์ ์ฌ๋ฆด ์ปฌ๋ผ๋ค
FOR dept_code IN ('D1','D2','D3','D4','D5','D6','D7','D8','D9')
/*
SELECT LISTAGG(dept_id, ',')
FROM department
*/
)
ORDER BY job_code;
SQL
๋ณต์ฌ
SELECT *
FROM (
SELECT dept_code, job_code
FROM employee
)
PIVOT (
COUNT(*)
-- ์ด์ ์ฌ๋ฆด ์ปฌ๋ผ๋ค
FOR dept_code IN ('D1','D2','D3','D4','D5','D6','D7','D8','D9')
/*
SELECT LISTAGG(dept_id, ',')
FROM department
*/
)
ORDER BY job_code;
SQL
๋ณต์ฌ
UNPIVOT
SELECT *
FROM (
SELECT dept_code
,MAX( DECODE(job_code, 'J1', salary ) ) J1
,MAX( DECODE(job_code, 'J2', salary ) ) J2
,MAX( DECODE(job_code, 'J3', salary ) ) J3
,MAX( DECODE(job_code, 'J4', salary ) ) J4
,MAX( DECODE(job_code, 'J5', salary ) ) J5
,MAX( DECODE(job_code, 'J6', salary ) ) J6
,MAX( DECODE(job_code, 'J7', salary ) ) J7
FROM employee
GROUP BY dept_code
ORDER BY dept_code
)
UNPIVOT (
salary
FOR job_code IN (J1, J2, J3, J4, J5, J6, J7)
)
;
SQL
๋ณต์ฌ