실무에서 쓰는 GROUPING 방법!
SELECT GROUPING(부서)||GROUPING(직급) AS GRP, 부서, 직급, AVG(급여)
FROM 직원
GROUP BY ROLLUP(부서, 직급);
이 쿼리에서 GROUPING(부서) || GROUPING(직급) AS GRP
는 두 개의 GROUPING
결과를 문자열로 결합하는 방식입니다. GROUPING(부서)
와 GROUPING(직급)
은 각각 0 또는 1의 값을 반환하며, 이 값들을 결합해 한 컬럼으로 보여주게 됩니다.
SELECT GROUPING(부서) || GROUPING(직급) AS GRP, 부서, 직급, AVG(급여)
FROM 직원
GROUP BY ROLLUP(부서, 직급);
GROUPING(부서)
: 1
이면 부서가 생략된 집계를 의미하고, 0
이면 부서가 포함된 집계를 의미합니다.GROUPING(직급)
: 1
이면 직급이 생략된 집계를 의미하고, 0
이면 직급이 포함된 집계를 의미합니다.가정: 아래와 같은 데이터가 있다고 해봅시다.
부서 | 직급 | 급여 |
---|---|---|
영업부 | 사원 | 4000 |
영업부 | 대리 | 5500 |
개발부 | 사원 | 5000 |
개발부 | 대리 | 7000 |
이 쿼리의 결과는 다음과 같습니다:
GRP | 부서 | 직급 | 평균 급여
--------------------------------
00 | 영업부 | 사원 | 4000
00 | 영업부 | 대리 | 5500
01 | 영업부 | NULL | 4750 (영업부 전체 평균)
00 | 개발부 | 사원 | 5000
00 | 개발부 | 대리 | 7000
01 | 개발부 | NULL | 6000 (개발부 전체 평균)
11 | NULL | NULL | 5375 (전체 회사 평균)
GRP = '00'
: 부서와 직급이 모두 포함된 집계를 의미합니다.GRP = '01'
: 부서별 집계이고, 직급이 생략된 집계를 의미합니다 (부서별 평균).GRP = '11'
: 부서와 직급이 모두 생략된 전체 집계를 의미합니다 (전체 회사 평균).GROUPING(부서)
와 GROUPING(직급)
을 결합하면, 해당 컬럼이 집계에서 어떻게 처리되었는지 쉽게 확인할 수 있습니다.00
, 01
, 10
, 11
의 값으로 나타납니다.00
: 부서와 직급이 모두 포함된 집계.01
: 직급이 생략된 집계 (부서별 집계).11
: 부서와 직급이 모두 생략된 전체 집계.