일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- sql
- 회고
- 코딩테스트
- 비즈니스분석가
- 도서출판길벗
- hackerrank
- 코테
- it모임
- 데이터
- 생활코딩
- 주간회고
- 데잇걸즈
- 취준생
- 윈도우함수
- Oracle
- 회고글
- 유데미
- 데이터분석
- 해커랭크
- 커리어브랜딩
- 오라클
- 행사후원
- 테크커리어
- 데잇걸즈6기
- 데이터엔지니어링
- 네트워킹모임
- HTML
- 취준
- SQLD
- airflow
- Today
- Total
Dream Lovers
SQL 그룹함수 (ROLLUP, CUBE, GROUPING_ID, GROUPING SETS) 본문
ROLLUP
부분합(subtotal)을 구해주는 grouping 함수
입력한 위계를 기반으로 합계를 구해준다.
SELECT
컬럼1,
컬럼2,
SUM(컬럼3)
FROM 테이블명
GROUP BY ROLLUP(컬럼1, 컬럼2) ;
(컬럼1, 컬럼2) 끼리의 값이 출력되고
(컬럼1)를 중심으로 그룹을 묶어서 subtotal이 계산됨
() 전체 총계
SELECT
컬럼1,
컬럼2,
컬럼3,
SUM(컬럼3)
FROM 테이블명
GROUP BY ROLLUP(컬럼1, 컬럼2, 컬럼3) ;
(컬럼1, 컬럼2, 컬럼3) 끼리의 값이 출력되고
(컬럼1, 컬럼2) 묶음의 subtotal 출력
(컬럼1)을 중심으로 subtotal
() 전체 집계 값
SELECT
NVL(sub_region_id,0) AS sub_region_id,
NVL(organization_region_id,0) as organization_region_id,
SUM(population)
FROM eba_countries
GROUP BY ROLLUP (NVL(sub_region_id,0), NVL(organization_region_id,0))
;
CUBE
부분합(subtotal)을 구해주는 grouping 함수
ROLLUP과 기능이 비슷하지만, 모든 컬럼을 조합하여 부분합을 구해준다는 차이점이 있다.
SELECT
컬럼1,
컬럼2,
SUM(컬럼3)
FROM 테이블명
GROUP BY CUBE(컬럼1, 컬럼2) ;
(컬럼1, 컬럼2) 묶음의 subtotal 출력
(컬럼1)을 중심으로 subtotal
(컬럼2)을 중심으로 subtotal
() 전체 집계 값
SELECT
컬럼1,
컬럼2,
컬럼3
SUM(컬럼3)
FROM 테이블명
GROUP BY CUBE(컬럼1, 컬럼2, 컬럼3) ;
(컬럼1, 컬럼2, 컬럼3)
(컬럼1, 컬럼2)
(컬럼1, 컬럼3)
(컬럼2, 컬럼3)
(컬럼1)
(컬럼2)
(컬럼3) 조합의 부분합이 생성됨
GROUPING_ID
현재 행이 총계인지, 부분합인지 명시해주는 함수 (flag 역할을 한다)
GROUP BY 절과 함께 SELECT 절 내에서 사용됨
이 때 숫자는 전체 총합이 가장 큰 수를 가짐
EX. GROUPING_ID( 컬럼1, 컬럼2)
GROUP_ID = 0 (컬럼1, 컬럼2)
GROUP_ID = 1 (컬럼1)
GROUP_ID = 2 (컬럼2)
GROUP_ID = 3 ( )
SELECT
NVL(region_id,0),
NVL(sub_region_id,0),
GROUPING_ID(NVL(region_id,0),NVL(sub_region_id,0)),
SUM(population)
FROM eba_countries
GROUP BY ROLLUP(NVL(region_id,0),NVL(sub_region_id,0));
GROUPING SETS
ROLLUP이나 CUBE와 다르게, 사용자가 직접 그룹핑할 수 있는 함
SELECT
컬럼1,
컬럼2,
SUM(컬럼3)
FROM 테이블명
GROUP BY
GROUPING SET((컬럼1, 컬럼2),컬럼2) ;
(컬럼1, 컬럼2)
(컬럼2)
GROUPING SET( (컬럼3, 컬럼2), (컬럼2,컬럼1), 컬럼1)) 의 경우,
(컬럼3, 컬럼2)
(컬럼2, 컬럼1)
컬럼1 의 형태로 부분합을 구하게 된다.
SELECT
NVL(region_id,0),
NVL(sub_region_id,0),
NVL(organization_region_id,0),
SUM(population)
FROM eba_countries
GROUP BY GROUPING SETS ((NVL(region_id,0),NVL(sub_region_id,0)), (NVL(sub_region_id,0),NVL(organization_region_id,0)))
;
'SQL 쿼리 테스트 > Tips' 카테고리의 다른 글
SQL 계층 쿼리 (START WITH, CONNECT BY PRIOR, ORDER SIBLINGS BY) (0) | 2023.09.10 |
---|---|
SQL 윈도우 함수 (집계, 순위, 분포, 분석함수의 종류) (0) | 2023.08.27 |
SQL 윈도우 함수 (구조, ROWS, RANGE의 차이) (0) | 2023.08.23 |
SQL 데이터 피벗/언피벗 (pivot/unpivot ) (0) | 2023.07.29 |
SQL 데이터 클렌징 (COALESCE, NVL, TRIM, PAD, GREATEST, LEAST) (0) | 2023.07.29 |