[SQL] GROUPING, GROUP BY ROLLUP - 애증의 롤업(1)

Yuri Lee·2024년 10월 15일
1

SQL

목록 보기
8/10

GROUPINGGROUP BY ROLLUP은 SQL에서 데이터 집계 작업을 할 때 유용하게 사용할 수 있는 기능입니다. 각 기능의 역할과 차이를 쉽게 설명할게요.

1. GROUP BY

우선, GROUP BY는 데이터를 특정 컬럼 값으로 묶어서 집계할 때 사용합니다. 예를 들어, 각 부서별로 직원들의 평균 급여를 구하고 싶다면 GROUP BY를 사용할 수 있습니다.

SELECT 부서, AVG(급여)
FROM 직원
GROUP BY 부서;

이 쿼리는 부서별로 묶어서 평균 급여를 계산해줍니다.


2. ROLLUP

ROLLUP은 여러 단계의 집계 결과를 한 번에 보여줍니다. 예를 들어, GROUP BY로 부서별 급여 평균을 구할 때, 전체 회사의 평균도 함께 보고 싶을 때 사용합니다. 즉, 특정 컬럼뿐만 아니라 전체 집계까지 한 번에 보여주는 기능이에요.

SELECT 부서, AVG(급여)
FROM 직원
GROUP BY ROLLUP(부서);

이 쿼리는 두 가지 결과를 보여줍니다:

  • 각 부서의 평균 급여
  • 전체 회사의 평균 급여 (부서가 NULL로 표시됨)

예시 결과:

부서      | 평균 급여
---------------------
영업부    | 5000
개발부    | 6000
인사부    | 5500
NULL     | 5500 (전체 평균)

3. 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: GROUP BY의 확장판으로, 컬럼별 집계와 전체 집계를 함께 제공.
  • GROUPING: ROLLUP이나 CUBE에서 집계된 결과인지 아닌지 구분할 때 사용.
profile
유리

0개의 댓글