본문 바로가기

프로그래밍/오라클

[ORACLE]오라클 함수 _ ROLLUP, CUBE, GROUPING SETS

[ORACLE]오라클 함수 _ ROLLUP, CUBE, GROUPING SETS





집계함수 정리
모두가 아는 GROUP BY 함수인, SUM(), AVG(), COUNT(), MAX(), MIN() 을 빼고 ROLLUP() & CUBE() & GROUPING SETS() 함수를 정리해본다.




1. ROLLUP()

   그룹의 소계와 총계를 구한다. (순서가 중요하다. 제일 앞에 놓인 것에 대해서 소계를 구하게 된다.)

-- 1. 1 ROLLUP
--     각 직업별로 어떤 취미를 가진 사원이 있는지, 그 사원수와 직업별 소계 및 총계를 구하여라.
SELECT MEM_JOB
       , MEM_LIKE
       , COUNT(1)
  FROM IC_MEMBER
 GROUP BY ROLLUP(MEM_JOB, MEM_LIKE)


-- 1.2 ROLLUP
-- 각 취미별로 어떤 직업을 가졌는지, 그 사원수와 취미별 소계 및 총계를 구하여라.
SELECT MEM_JOB
       , MEM_LIKE
       , COUNT(1)
  FROM IC_MEMBER
 GROUP BY ROLLUP(MEM_LIKE, MEM_JOB)






2. CUBE()

   각 그룹의 모든 경우의 수에 대한 소계와 총계를 구한다.

-- 2. CUBE
--    직업별로 같은 취미를 가진 사람수를 구하고, 직업별 소계와 총계를 구해라.
SELECT  MEM_JOB, MEM_LIKE, COUNT(*)
  FROM  IC_MEMBER
 GROUP  BY CUBE(MEM_JOB,MEM_LIKE)





3. GROUPING SETS()

GROUP BY 의 확장판이라 할 수 있다. 

- GROUP BY 절에서 사용되며 여러개의 그룹 조건을 기술 할 수 있다.

- 각 조건별 집계를 확인 할 수 있다.

-- 3.  GROUPING SETS()
--     직업별, 취미별 인원수를 구하여라.
  SELECT  MEM_JOB, MEM_LIKE, COUNT(*)  
    FROM  IC_MEMBER
GROUP BY  GROUPING SETS(MEM_JOB, MEM_LIKE);





4. LISTAGG()
    하나의 테이블에서 다양한 집계함수를 사용할 경우

-- 4.  LISTAGG()
--     취미별 멤버를 나열하여라.
  SELECT  MEM_LIKE "취미" 
          , LISTAGG(MEM_NAME,'//') WITHIN GROUP(ORDER BY MEM_ID) "LISTAGG"
    FROM  IC_MEMBER
GROUP BY  MEM_LIKE;