๐Ÿ’ป/ORACLE

[ORACLE] 5์ผ์ฐจ : SQLํ•จ์ˆ˜(์ง‘๊ณ„ ํ•จ์ˆ˜) - 2

๋”ฐ๊ถˆ 2024. 3. 15. 17:58

 

ROLLUP์ ˆ

์†Œ๊ณ„๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. grouping columns์˜ ์ˆ˜๋ฅผ N์ด๋ผ๊ณ  ํ–ˆ์„๋•Œ N+1 Level์˜ ์†Œ๊ณ„๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ROLLUP์˜ ์ธ์ˆ˜๋Š” ๊ณ„์ธต ๊ตฌ์กฐ์ด๋ฏ€๋กœ ์ธ์ˆ˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋„ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.

์ •๋ ฌ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” ORDER BY์ ˆ์— ๋ช…์‹œ์ ์œผ๋กœ ์ •๋ ฌ ์ปฌ๋Ÿผ์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•œ๋‹ค. 

 

SELECT dept,pos,SUM(sal)
FROM emp
GROUP BY ROLLUP(dept,pos)
ORDER BY dept,pos;

 

 

 

 

๋ถ€์„œ๋ณ„ ์ธ์›์ˆ˜์™€ ๋งˆ์ง€๋ง‰์— ์ „์ฒด ์ธ์›์ˆ˜ ์ถœ

SELECT dept, count(*)
FROM emp
GROUP BY ROLLUP(dept);

 

 

 

 

 

CUBE์ ˆ

CUBE๋Š” ๊ฒฐํ•ฉ ๊ธฐ๋Šฅํ•œ ๋ชจ๋“  ๊ฐ’์— ๋Œ€ํ•˜์—ฌ ๋‹ค์ฐจ์› ์ง‘๊ณ„๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด CUBE์ ˆ์—์„œ 3(n)๊ฐœ์˜ ํ‘œํ˜„์‹์ด ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ 8๊ฐœ์˜ ๊ทธ๋ฃนํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค. CUBE์˜ ๊ฒฝ์šฐ ํ‘œ์‹œ๋œ ์ธ์ˆ˜๋“ค์— ๋Œ€ํ•œ ๊ณ„์ธต๋ณ„ ์ง‘๊ณ„๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋•Œ ํ‘œ์‹œ๋œ ์ธ์ˆ˜๋“ค ๊ฐ„์—๋Š” ๊ณ„์ธต ๊ตฌ์กฐ์ธ ROLLUP๊ณผ๋Š” ๋‹ฌ๋ฆฌ ํ‰๋“ฑํ•œ ๊ด€๊ณ„์ด๋ฏ€๋กœ ์ธ์ˆ˜์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ ํ–‰๊ฐ„์— ์ •๋ ฌ ์ˆœ์„œ๋Š” ๋ฐ”๋€”์ˆ˜ ์žˆ์–ด๋„ ๋ฐ์ดํ„ฐ ๊ฒฐ๊ณผ๋Š” ๊ฐ™๋‹ค. CUBE๋Š” ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ์ •๋ ฌ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” ORDER BY์ ˆ์— ๋ช…์‹œ์ ์œผ๋กœ ์ •๋ ฌํ•  ์ปฌ๋Ÿผ์„ ๋ช…์‹œํ•œ๋‹ค.

 

CUBE ์ง‘๊ณ„

 

SELECT dept,pos,SUM(sal)
FROM emp
GROUP BY city, CUBE(dept,pos)
ORDER BY city,dept,pos;

 

 

 

 

 

GROUPING

GROUPING ํ•จ์ˆ˜๋Š” ROLLUP์ด๋‚˜ CUBE์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ GROUPING ํ•จ์ˆ˜์— ๊ธฐ์ˆ ๋œ ์ปฌ๋Ÿผ์ด ROLLUP์ด๋‚˜ CUBE์ ˆ์—์„œ ์‚ฌ์šฉ์ด ๋˜์—ˆ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค. GROUPING ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•  ๊ฒฝ์šฐ ์ถœ๋ ฅ๋˜๋Š” ๊ฒฐ๊ณผ ๊ฐ’์ค‘ NULL๊ฐ’์ด ์žˆ๋‹ค๋ฉด NULL๊ฐ’์ด ROLLUP์ด๋‚˜ CUBE ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋กœ ์ƒ์„ฑ๋œ ๊ฒƒ์ธ์ง€, ์›๋ž˜ ํ…Œ์ด๋ธ”์ƒ์— NULL๊ฐ’์œผ๋กœ ์ €์žฅ๋œ ๊ฒƒ์ธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. GROUPING ํ•จ์ˆ˜๋Š” ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ 0๋˜๋Š” 1์„ ๋ฆฌํ„ดํ•œ๋‹ค. 0๊ฐ’์„ ๋ฆฌํ„ด ํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์ธ์ˆ˜๋กœ ์“ฐ์ธ ๊ฐ’์ด ROLLUP์ด๋‚˜ CUBE์—์„œ ์‚ฌ์šฉ๋˜์–ด ์กŒ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๊ณ , 1๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒฝ์šฐ ROLLUP์ด๋‚˜ CUBE์— ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. 

 

SELECT dept,pos,SUM(sal),GROUPING(dept),GROUPING(pos)
FROM emp
GROUP BY city, CUBE(dept,pos)
ORDER BY city,dept,pos;

 

 

 

 

GROUP_ID

ํ˜•์‹ GROUP_ID()

SELECT๋ฌธ์—์„œ GROUP BY๋กœ ๋ถ„๋ฆฌ๋˜์–ด ๋ณต์ œ๋œ ๋ฒˆํ˜ธ๋กœ ๋ณต์ œ ํšŸ์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜๋„๋ก ์ถœ๋ ฅํ•œ๋‹ค. ๋ฒˆํ˜ธ๊ฐ€ 0๋ถ€ํ„ฐ ์‹œ์ž‘๋˜๋ฏ€๋กœ n๋ฒˆ ๋ณต์ œ๋˜์—ˆ์œผ๋ฉด n-1 ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. GROUP BY์˜ ํ™•์žฅ์œผ๋กœ ์ธํ•˜์—ฌ ๊ฐ™์€ grouping์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์ด ์ค‘๋ณต๋˜์–ด ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋•Œ ์ค‘๋ณต๋œ ๊ทธ๋ฃน๋“ค์„ ๊ตฌ๋ณ„ ํ•˜๊ธฐ์œ„ํ•ด ์ฒ˜์Œ์œผ๋กœ ์ค‘๋ณต๋˜์–ด ๋‚˜ํƒ€๋‚˜๋Š” ํ–‰์— ๋Œ€ํ•˜์—ฌ GROUP_ID ํ•จ์ˆ˜๋Š” 0์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๊ฒฝ์šฐ์— ๋Œ€ํ•˜์—ฌ 1์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

 

SELECT dept,empNO,name,SUM(sal),GROUP_ID()
FROM emp
GROUP BY dept, ROLLUP(dept,(empNO,name))
ORDER BY dept,GROUP_ID(),empNO;