그룹 함수 개념에 대해서 이야기해봅시다.
그룹 함수 개념에 대해 알기
그룹 함수 개념은 데이터베이스(DataBase)에서 SQL(Structured Query Language)을 통해 1개 이상의 행을 그룹으로 묶어서 통계 정보를 계산할 수 있도록 하는 함수입니다.
그룹 함수에는 집계 함수와 소계 함수가 있습니다.
[그룹 함수의 종류]
구분 | 종류 | 내용 |
1 | 집계 함수 | COUNT, SUM, AVG, MAX, MIN 등 |
2 | 소계 함수 | ROLLUP, CUBE, GROUPING SETS 등 |
그룹 함수(Group Function)는 데이터를 GROUP BY 하여 나타낼 수 있는 데이터를 구하는 함수입니다. 그룹 함수를 역할에 따라 구분하면 집계 함수와 소계(총계) 함수로 구분할 수 있습니다.
그룹 함수는 반드시 하나의 값 만을 반환하게 됩니다. 그리고 NULL 값이 있는 컬럼은 조회에 포함되지 않습니다. NULL 값도 함께 고려되기 위해서는 NVL과 VNL2와 같은 함수를 사용해야 합니다.
GROUP BY 설정 없이는 일반 컬럼과 기술될 수 없습니다. COUNT, MAX, MIN은 문자와 숫자, 날짜 데이터를 모두 사용할 수 있지만 AVG, SUM, VARIANCE, STDDDEV는 숫자만 사용 가능합니다.
집계 함수는 COUNT, SUM, AVG, MAX, MIN가 대표적입니다.
소계 함수는 ROULLUP, CUBE, GROUPING SETS가 대표적입니다.
그룹 함수 개념에 대한 설명
그룹 함수(Group Function)는 데이터베이스(DataBase) 내 테이블(Table)에서 전체 데이터 행을 1개 이상의 컬럼을 기준으로 컬럼 값에 따라 그룹화 하여 그룹 별로 결과를 출력하도록 하는 함수입니다.
그룹 함수 종류에는 COUNT, MAX, MIN, SUM, AVG, VARIANCE, STDDEV, ROLLUP, CUBE, GROUPING SETS 등이 있습니다.
그룹 함수는 집계 함수와 소계 함수로 구분할 수 있습니다. 집계 함수는 COUNT, MAX, MIN, SUM, AVG, VARIANCE, STDDEV 함수이며 소계 함수는 ROLLUP, CUBE, GROUPING SETS 입니다.
집계 함수를 정리하면 아래와 같습니다.
[집계 함수 정리]
함수명 | 기능 | 사용 |
COUNT | 행의 개수를 구하는 함수 | COUNT(컬럼) |
MAX | 값들 중 최대 값을 구하는 함수 | MAX(컬럼) |
MIN | 값들 중 최소 값을 구하는 함수 | MIN(컬럼) |
AVG | 값들 중 평균을 구하는 함수 | AVG(컬럼) |
SUM | 값들 중 총합을 구하는 함수 | SUM(컬럼) |
VARIANCE | 분산을 계산하는 함수 | VARIANCE(컬럼) |
STDDEV | 표준편차를 계산하는 함수 | STDDEV(컬럼) |
소계 함수를 정리하면 아래와 같습니다.
[소계 함수 정리]
함수명 | 기능 |
ROLLUP | 소그룹 간의 소계와 총계를 계산하는 함수 |
CUBE | 소그룹 간의 소계와 총계를 다차원적으로 계산할 수 있는 함수 |
GROUPING SETS | 특정 항목에 대한 소계를 계산 하는 함수 |
1. ROLLUP 함수
ROLLUP은 소그룹 간의 소계와 총계를 계산하는 함수입니다. ROLLUP 함수를 사용하면 그룹핑과 함께 총합계 결과도 얻을 수 있습니다. ROLLUP은 가장 기본적인 통계 명령입니다.
[ROLLUP 사용 예시]
SELECT 컬럼1, COUNT(*)
FROM 테이블1
GROUP BY ROLLUP(컬럼1)
ORDER BY 컬럼1
→ 컬럼1별로 그룹핑 + 총합계의 결과가 표출됨
[ROLLUP 기능]
구분 | 내용 |
ROLLUP(a) | – a로 그룹핑 – 총합계 |
ROLLUP(a, b) | – a, b로 그룹핑 – a로 그룹핑 – 총합계 |
ROLLUP(a, b, c) | – a, b, c로 그룹핑 – a, b로 그룹핑 – a로 그룹핑 – 총합계 |
2. CUBE 함수
CUBE 함수는 소그룹 간의 소계와 총계를 다차원적으로 계산할 수 있도록 하는 함수입니다. GROUP BY는 일방향으로 그룹핑하여 소계를 구하지만 CUBE는 조합할 수 있는 모든 그룹에 대한 소계를 집계할 수 있게 됩니다.
[CUBE 함수 사용 예시]
SELECT 컬럼1, COUNT(*)
FROM 테이블1
GROUP BY CUBE(컬럼1)
ORDER BY 컬럼1
→ 컬럼1별로 그룹핑 + 총합계의 결과가 표출됨
SELECT 컬럼1, 컴럼2, COUNT(*)
FROM 테이블1
GROUP BY CUBE(컬럼1, 컬럼2)
ORDER BY 컬럼1
→ 컬럼1, 컬럼2별로 그룹핑 + 컬럼1별로 그룹핑 + 컬럼2별로 그룹핑 + 총합계의 결과가 표출됨
[CUBE 기능]
구분 | 내용 |
CUBE(a) | – a로 그룹핑 – 총합계 |
CUBE(a, b) | – a, b로 그룹핑 – a로 그룹핑 – b로 그룹핑 – 총합계 |
CUBE(a, b, c) | – a, b, c로 그룹핑 – a, b로 그룹핑 – a, c로 그룹핑 – b, c로 그룹핑 – a로 그룹핑 – b로 그룹핑 – c로 그룹핑 – 총합계 |
3. GROUPING SETS
GROUPING SETS는 특정 항목에 대한 소계를 계산하도록 하는 함수입니다.
[GROUPING SETS 함수 사용 예시]
SELECT 컬럼1, 컴럼2, COUNT(*)
FROM 테이블1
GROUP BY GROUPING SETS(컬럼1, 컬럼2, ())
ORDER BY 컬럼1, 컬럼2
→ 컬럼1별로 그룹핑 + 컬럼2별로 그룹핑한 결과 + 총합계의 결과가 표출됨
[GROUPING SETS 기능]
구분 | 내용 |
GROUPING SETS(a, b) | – a로 그룹핑 – b로 그룹핑 |
GROUPING SETS(a, b, ()) | – a로 그룹핑 – b로 그룹핑 – 총합계 |
GROUPING SETS(a, ROLLUP(b)) | – a로 그룹핑 – b로 그룹핑 – 총합계 |
GROUPING SETS(a, ROLLUP(b, c)) | – a로 그룹핑 – b, c로 그룹핑 – b로 그룹핑 – 총합계 |
GROUPING SETS(a, b, ROLLUP(c)) | – a로 그룹핑 – b로 그룹핑 – c로 그룹핑 – 총합계 |