본문 바로가기
SQL

[SQL] 그룹함수 (ROLLUP(), CUBE(), GROUPING SETS())

by 미눅스[멘토] 2024. 8. 13.
728x90

그룹함수의 종류

그룹함수의 종류에는 ROLLUP(속성명), CUBE(속성명), GROUPING SETS(속성명) 으로 표현한다.

 

1. ROLLUP : 소그룹 간의 소계를 계산

2. CUBE : GROUP BY 항목들간 단원적인 소계를 계산할 수 있다(모든 그룹케이스를 계산)

3. GROUPING SETS: 특정 항목에 대한 소계를 계산할 수 있다.

 

(GROUPING SETS는 특정 항목을 그룹한 다수의 SQL들을  UNION 한것과 같다. 또한 나머지 그룹함수들에 대해서도 UNION으로 같은 결과를 낼 수 있다.)

 

 

 

GROUPING SETS()

1. GROUPING SETS는 ROLLUP과 CUBE와는 다르게 그룹핑된 결과만 보여준다.

2. GROUPING SETS는 괄호로 묶은 집합별로 집계 역시 구할 수 있다.

     ㄴEX) GROUP BY GROUPING SETS(DEPT_NO, JOB, (DEPT_NO, JOB ), ());

 

- A별, B별 그룹 연산 결과 출력

- 나열 순서 중요하지 X

- 기본 출력에 전체 총계는 출력되지 X

- NULL 혹은 () 사용하여 전체 총 합 출력 가능

 

#GROUP BY GROUPING SETS(DEPT_NO, JOB, ()) 에서 '()'는 전체 총 합 출력을 말한다.
SELECT DEPT_NO, JOB, SUM(SAL)
FROM DEPT
GROUP BY GROUPING SETS(DEPT_NO, JOB, ());

 

DEPT_NO JOB SUM(SAL)
A001 null 3000
A002 null 5000
null 개발자 2000
null 디자이너 1000
null null 11000

 

ROLLUP()

 

-A별,(A,B)별, 전체 그룹 연산 결과 출력

-나열 대상의 순서가 중요

-기본적으로 전체 총계가 출력

 

EX)ROLLUP(DEPT_NO, JOB)  -> DEPT_NO별, (DEPT_NO, JOB)별 전체 연산 결과 출력

SELECT DEPT_NO, JOB, SUM(SAL)
FROM DEPT
GROUP BY ROLLUP(DEPT_NO, JOB);

 

DEPT_NO JOB SUM(SAL)
A001 개발자 2000
A001 디자이너 1000
A001 null 3000
A002 개발자 5000
A002 null 5000
null null 8000

 

 

 

CUBE()

1. CUBE 함수는 그룹핑 컬럼이 가질 수 있는 모든 경우의 수에 대하여 소계(SUBTOTAL)과 총계 (GRAND TOTAL)을 생성한다.

2. ROLLUP 함수와 다르게 인자의 순서가 달라도 결과는 같다.

SELECT DEPT_NO, JOB, SUM(SAL)
FROM DEPT
GROUP BY CUBE(DEPT_NO, JOB)
DEPT_NO JOB SUM(SAL)
null null 8000
null 개발자 5000
null 디자이너 1000
A001 개발자 2000
A001 디자이너 1000
A001 null 3000
A002 개발자 5000
A002 null 5000