Search

๊ทธ๋ฃน ๊ด€๋ จ ํ•จ์ˆ˜

๊ทธ๋ฃน ๊ด€๋ จ ํ•จ์ˆ˜

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
๋ณต์‚ฌ