[과목2.SQL 기본 및 활용 - 3-9. 그룹 함수(Group Function)]
1. 그룹 함수?
(1) 그룹함수를 통해 소계/중계/합계/총합계를 구할 수 있다.
(2) 하나의 SQL로 테이블을 한번만 읽어서 빠르게 원하는 리포트 작성 가능
2. 그룹 함수의 종류
(1) ROLLUP
- Subtotal을 생성하기 위해 사용
- 그룹핑컬럼의 수가 N일때, N+1 Level의 Subtotal이 생성된다.
- 계층구조이기에 순서가 바뀌면 수행 결과도 바뀌게 되므로 순서에도 주의
(2) CUBE
- 다차원적인 소계를 계산
- 결합 가능한 모든 값에 대해 다차원 집계를 생성
- 그룹핑컬럼의 수가 N일 때, 2의 N승 Subtotal이 생성
- 시스템의 성능에 무리를 많이 준다.
(3) GROUPING SETS
3. ROLLUP 함수
(1) GROUP BY 뒤에 사용 (ex. ROLLUP(표현식1, 표현식2…)
(2) 전체 집계(Grand Total), 표현식 별 집계(Sub Total)
(3) Subtotal의 경우 계층구조이기 때문에 표현식이 여러 개일 경우에는,
가장 처음나온것부터 차례로 보여준다.
ex) ROLLUP(부서,업무,성별) 일 경우.. = 3개의 컬럼 = 3+1 = 4개의 결과값
- 부서별 업무별 성별별 집계
- 부서별 업무별 집계 (모든 성별 포함)
- 부서별 집계 (모든 성별, 모든 업무 포함)
- 전체 집계 (Grand Total)
이렇게 4가지가 나온다.
4. GROUPING 함수
(1) ROLLUP이나 CUBE에 의한 소계가 계산된 결과에는 그룹핑 함수 적용시 1이 표시된다. 그 외는 0
5. CUBE 함수
(1) 결합 가능한 모든 값에 대해 다차원 집계를 생성한다.
(2) ROLLUP은 가능한 Subtotal과는 다르게 전체를 경우를 구한다.
ex) CUBE(부서,성별) 일 경우.. = 2개의 컬럼 = 2^2 = 4개의 결과값
- 부서별 성별별 집계
- 부서별 집계 (모든 성별 포함)
- 성별별 집계 (모든 부서 포함)
- 전체 집계 (Grand Total)
이렇게 4가지의 결과가 나온다.
만약, 컬럼이 3가지였을 경우.. CUBE(부서,성별,업무) 3개 컬럼 = 2의3승 2^2^2 = 8개 결과
- 성별별 업무별 집계
- 부서별 업무별 집계
- 부서별 성별별 업무별 집계
- 부서별 성별별 집계
- 부서별 집계
- 성별별 집계
- 업무별 집계
- 전체 집계
6. GROUPING SETS 함수
(1) UNION ALL을 사용한 SQL과 같은 결과를 얻을 수 있다.
(2) 괄호를 묶은 집합 별로 집계를 구할 수 있다.
(3) 예시) GROUPING SETS(표현식1,표현식2…)