[SQL] 그룹함수

Oracle의 그룹함수를 알아보자. 그룹함수는 데이터를 GROUP BY 하여 나타낼 수 있는 데이터를 구하는 함수이다. 집계 함수와 소계(총계) 함수로 나눌 수 있다. 소계 관련 함수로는 ROLLUP, CUBE, GROUPING SETS, GROUPING 등이 있다.
Hi's avatar
Aug 13, 2024
[SQL] 그룹함수

💡
Oracle의 그룹함수를 알아보자. 그룹함수는 데이터를 GROUP BY 하여 나타낼 수 있는 데이터를 구하는 함수이다. 집계 함수와 소계(총계) 함수로 나눌 수 있다. 소계 관련 함수로는 ROLLUP, CUBE, GROUPING SETS, GROUPING 등이 있다.
 
 

✅ 1. 그룹 함수

집계 함수
COUNT, SUM, AVG, MAX, MIN
소계(총계) 함수
ROLLUP, CUBE, GROUPING SETS 등 - ROLLUP 함수는 인수의 순서에 따라 결과가 달라지지만, CUBEGROUPING SETS 함수는 인수의 순서가 바뀌어도 같은 결과를 출력한다.
 

✅ 2. 집계 함수

💡
데이터를 그룹화하면, 그룹화된 각 그룹을 집계하는 여러 함수를 사용할 수 있다.
함수
의미
COUNT(*)
전체 행의 개수를 반환
COUNT(col)
col 값이 NULL이 아닌 개수를 반환
COUNT(DISTINCT col)
col 값이 NULL이 아닌 데이터 중, 중복을 제거한 개수를 반환
SUM(col)
NULL이 아닌 col의 총합을 반환
AVG(col)
NULL이 아닌 col의 평균을 반환
MIN(col)
NULL이 아닌 col의 최솟값을 반환
MAX(col)
NULL이 아닌 col의 최댓값을 반환
 

✅ 3. ROLLUP

💡
소그룹 간 소계 및 총계를 계산하는 함수이다. 그룹 별로 함수를 계산한 값과, 총 그룹들에 함수를 계산한 값을 모두 출력해준다.
ROLLUP(A)
- A로 그룹화 - 총합계
ROLLUP(A, B)
- A, B로 그룹화 - A로 그룹화 - 총합계
ROLLUP(A, B, C)
- A, B, C로 그룹화 - A, B로 그룹화 - A로 그룹화 - 총합계
 
notion image
그룹화할 컬럼이 1개일 때
 
notion image
그룹화할 컬럼이 2개일 때
 
notion image
그룹화할 컬럼이 3개일 때
 

✅ 4. CUBE

💡
소그룹 간의 소계 및 총계를 다차원적으로 계산할 수 있는 함수이다. GROUP BY가 일방향으로 그룹화하여 소계를 구했다면, CUBE는 조합할 수 있는 모든 그룹에 대한 소계를 집계한다.
ROLLUP(A)
- A로 그룹화 - 총합계
ROLLUP(A, B)
- A, B로 그룹화 - A로 그룹화 - B로 그룹화 - 총합계
ROLLUP(A, B, C)
- A, B, C로 그룹화 - A, B로 그룹화 - A, C로 그룹화 - B, C로 그룹화 - A로 그룹화 - B로 그룹화 - C로 그룹화 - 총합계
 
notion image
그룹화할 컬럼이 1개일 때
 
notion image
그룹화할 컬럼이 2개일 때
 
notion image
그룹화할 컬럼이 3개일 때 (아래 더 있음)
 

✅ 5. GROUPING SETS

💡
특정 항목에 대한 소계를 계산하는 함수이다. 인자값으로 ROLLUP이나 CUBE를 사용할 수 있다.
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로 그룹화 - 총합계
 

✅ 6. GROUPING

💡
GROUPING 함수는 ROLLUP, CUBE, GROUPING SETS 등과 함께 쓰이며 소계를 나타내는 ROW를 구분할 수 있게 해준다. 원래 ROW에서 그룹핑의 기준이 되는 컬럼을 제외하고 모두 NULL 값으로 표현되었지만, GROUPING 함수를 이용하면 원하는 위치에 원하는 텍스트를 출력할 수 있다.
notion image
GROUPING() 함수를 사용하면, 그룹화한 컬럼값으로 1을 리턴한다. 저 1을 가지고 아래처럼 특정 값을 넣을 수 있다.
 
notion image
GROUPING(deptno)의 값이 1이면 0을 넣고, 아니라면 원래의 deptno 값을 넣도록 설정하여 원래 NULL이었던 deptno 값을 채울 수 있다! 단, 넣을 수 있는 값은 원래 컬럼의 데이터 타입과 일치해야 한다.
 
Share article

soultree