GROUPING
과 GROUP BY ROLLUP
은 SQL에서 데이터 집계 작업을 할 때 유용하게 사용할 수 있는 기능입니다. 각 기능의 역할과 차이를 쉽게 설명할게요.
GROUP BY
우선, GROUP BY
는 데이터를 특정 컬럼 값으로 묶어서 집계할 때 사용합니다. 예를 들어, 각 부서별로 직원들의 평균 급여를 구하고 싶다면 GROUP BY
를 사용할 수 있습니다.
SELECT 부서, AVG(급여)
FROM 직원
GROUP BY 부서;
이 쿼리는 부서별로 묶어서 평균 급여를 계산해줍니다.
ROLLUP
ROLLUP
은 여러 단계의 집계 결과를 한 번에 보여줍니다. 예를 들어, GROUP BY
로 부서별 급여 평균을 구할 때, 전체 회사의 평균도 함께 보고 싶을 때 사용합니다. 즉, 특정 컬럼뿐만 아니라 전체 집계까지 한 번에 보여주는 기능이에요.
SELECT 부서, AVG(급여)
FROM 직원
GROUP BY ROLLUP(부서);
이 쿼리는 두 가지 결과를 보여줍니다:
NULL
로 표시됨)예시 결과:
부서 | 평균 급여
---------------------
영업부 | 5000
개발부 | 6000
인사부 | 5500
NULL | 5500 (전체 평균)
GROUPING
GROUPING
함수는 ROLLUP
이나 CUBE
같은 집계 함수와 함께 사용되며, 집계 행인지 아닌지를 구분할 때 유용합니다. 즉, 집계된 결과에서 NULL
값이 "전체 집계"인지, 그냥 데이터의 NULL
인지 구분할 수 있게 해줍니다.
SELECT 부서, GROUPING(부서), AVG(급여)
FROM 직원
GROUP BY ROLLUP(부서);
여기서 GROUPING(부서)
는 부서가 집계된 값일 때 1
, 아니면 0
을 반환합니다.
예시 결과:
부서 | GROUPING | 평균 급여
--------------------------------
영업부 | 0 | 5000
개발부 | 0 | 6000
인사부 | 0 | 5500
NULL | 1 | 5500 (전체 평균)
GROUPING(부서) = 1
은 그 행이 전체 집계(모든 부서의 평균)를 나타낸다는 의미입니다.GROUP BY
의 확장판으로, 컬럼별 집계와 전체 집계를 함께 제공.ROLLUP
이나 CUBE
에서 집계된 결과인지 아닌지 구분할 때 사용.