재우니의 블로그

MSSQL에서 ROLLUP은 GROUP BY 절과 함께 사용

 

MSSQL에서 ROLLUP은 GROUP BY 절과 함께 사용되는 롤업 연산자입니다. ROLLUP을 사용하면 계층적인 집계를 수행할 수 있으며, 하위 수준에서부터 상위 수준까지의 부분 합계 및 총합계를 반환할 수 있습니다.

ROLLUP을 사용하는 일반적인 구문은 다음과 같습니다.

 

SELECT column1, column2, ..., aggregate_function(column)
FROM table_name
GROUP BY ROLLUP (column1, column2, ...)

 

 

 

위의 구문에서 ROLLUP 절에는 집계를 수행할 열을 지정합니다. ROLLUP 절에 지정된 열들은 계층적인 구조로 그룹화되며, 열들의 조합에 따라 하위 수준의 부분 합계 및 총합계가 반환됩니다.

다음은 ROLLUP을 사용하여 부서별, 직급별로 급여의 합계 및 총합계를 계산하는 예시입니다.

 

SELECT Department, Position, SUM(Salary) AS TotalSalary
FROM Employees
GROUP BY ROLLUP (Department, Position);

위의 예시에서는 Employees 테이블에서 부서별, 직급별로 급여의 합계를 계산합니다. ROLLUP (Department, Position) 구문을 사용하여 계층적인 그룹화를 수행하며, 각 부서와 직급의 조합에 따른 부분 합계와 총합계가 반환됩니다.

아래는 예시 결과의 표 형태입니다.

 

 

위의 결과에서 NULL은 해당 열의 총합계를 나타냅니다. 

 

Sales 부서의 총합계는 25000, 

Marketing 부서의 총합계는 14000, 

모든 부서의 총합계는 39000입니다. 즉, 마지막 행은 모든 열의 총합계를 나타냅니다.

 

 

MSSQL에서 WITH ROLLUP 구문

 

MSSQL에서 WITH ROLLUP 구문은 GROUP BY 구문과 함께 사용되어 ROLLUP의 결과에 대한 추가 정보를 제공하는 기능입니다. WITH ROLLUP을 사용하면 부분 합계와 총합계를 포함한 계층적인 집계 결과를 반환할 수 있습니다.

위의 구문에서 WITH ROLLUP은 GROUP BY 절 다음에 위치하며, ROLLUP 절의 결과에 대한 추가적인 정보를 제공합니다. 예를 들어, 다음과 같은 테이블이 있다고 가정해봅시다:

 

Employees 테이블:

| Department | Position | Salary |
|------------|----------|--------|
| Sales      | Manager  | 5000   |
| Sales      | Staff    | 3000   |
| Marketing  | Manager  | 4000   |
| Marketing  | Staff    | 2000   |

 

이제 다음과 같은 쿼리를 실행해보겠습니다:

 

SELECT Department, Position, SUM(Salary) AS TotalSalary
FROM Employees
GROUP BY Department, Position
WITH ROLLUP;

위의 쿼리는 부서별, 직급별로 급여의 합계를 계산하고, WITH ROLLUP을 사용하여 부분 합계와 총합계를 반환합니다. 결과는 다음과 같습니다:

| Department | Position | TotalSalary |
|------------|----------|-------------|
| Sales      | Manager  | 5000        |
| Sales      | Staff    | 3000        |
| Sales      | NULL     | 8000        |
| Marketing  | Manager  | 4000        |
| Marketing  | Staff    | 2000        |
| Marketing  | NULL     | 6000        |
| NULL       | NULL     | 14000       |

 

GROUPING 함수의 이해

 

https://gent.tistory.com/377

 

따라서 소계값을 제거하고자 한다면, GROUP BY 절 다음에 HAVING GROUPING(절) 을 통해 조정이 가능합니다.

 

SELECT job
     , deptno
     , SUM(sal) AS total_sal
  FROM emp
 WHERE job IN ('MANAGER', 'CLERK', 'SALESMAN')
 GROUP BY ROLLUP(job, deptno)  
HAVING GROUPING(job) = 1 OR GROUPING(deptno) = 0

 

좀 더 상세한 추가 설명 내용은 https://gent.tistory.com/377 추천합니다.

 

 

 

ORACLE에서 ROLLUP은 GROUP BY 절과 함께 사용

 

ORACLE에서 ROLLUP은 GROUP BY 절과 함께 사용되는 롤업 연산자입니다. ROLLUP을 사용하면 계층적인 집계를 수행할 수 있으며, 하위 수준에서부터 상위 수준까지의 부분 합계 및 총합계를 반환할 수 있습니다.

ROLLUP을 사용하는 일반적인 구문은 다음과 같습니다.

 

SELECT column1, column2, ..., aggregate_function(column)
FROM table_name
GROUP BY ROLLUP (column1, column2, ...)

위의 구문에서 ROLLUP 절에는 집계를 수행할 열을 지정합니다. ROLLUP 절에 지정된 열들은 계층적인 구조로 그룹화되며, 열들의 조합에 따라 하위 수준의 부분 합계 및 총합계가 반환됩니다.

다음은 ROLLUP을 사용하여 부서별, 직급별로 급여의 합계 및 총합계를 계산하는 예시입니다.

 

SELECT Department, Position, SUM(Salary) AS TotalSalary
FROM Employees
GROUP BY ROLLUP (Department, Position);

 

위의 예시에서는 Employees 테이블에서 부서별, 직급별로 급여의 합계를 계산합니다. ROLLUP (Department, Position) 구문을 사용하여 계층적인 그룹화를 수행하며, 각 부서와 직급의 조합에 따른 부분 합계와 총합계가 반환됩니다.

아래는 예시 결과의 표 형태입니다.

 

 

위의 결과에서 NULL은 해당 열의 총합계를 나타냅니다. 

예를 들어, 

 

Sales 부서의 총합계는 25000, 

Marketing 부서의 총합계는 14000, 

모든 부서의 총합계는 39000입니다. 마지막 행은 모든 열의 총합계를 나타냅니다.

 

 

오라클도 소계들을 제외하고 총합은 보이도록 하는 방법이 있습니다.

 

SELECT Department, Position, SUM(Salary) AS TotalSalary
FROM Employees
GROUP BY ROLLUP ((Department, Position));

 

그러면, 반대로 총합을 제외하고 소계들은 보이고자 한다면?

 

SELECT Department, Position, SUM(Salary) AS TotalSalary
FROM Employees
GROUP BY Department, ROLLUP(Position);

 

여기서도 좀 더 상세히 알고자 한다면 https://myjamong.tistory.com/191 블로그 추천합니다.

 

 

 

 

참고 사이트

 

https://gent.tistory.com/377

 

[MSSQL] ROLLUP 사용법 (소계, 합계)

SQL Server에서 그룹 함수로 집계된 데이터에서 소계, 합계를 쉽게 구하기 위해서는 ROLLUP를 사용하면 된다. 아래의 예제를 참고하면 쉽게 이해할 수 있다. ROLLUP은 2가지 사용방법이 있다. 어느 것을

gent.tistory.com

 

https://myjamong.tistory.com/191

 

[Oracle] ROLLUP 고급 사용법 GROUPING 함수 :: 마이자몽

GROUP BY 1 2 3 4 5 6 SELECT DEPTNO ,JOB ,SUM(SAL) FROM EMP GROUP BY DEPTNO, JOB; ORACLE SCOTT 계정의 EMP 테이블을 사용해서 실습을 진행했습니다. 일반적으로 사용하는 GROUP BY 문입니다. SUM 함수를 이용해서 각 부서별

myjamong.tistory.com