[MSSQL] GROUPING SETS 사용법 (특정 항목의 합계)
- 데이터베이스/MSSQL
- 2023. 6. 19.
SQL Server에서 특정 기준의 소계 및 합계를 구할 때는 GROUPING SETS를 사용하면 쉽게 해결된다. GROUPING SETS는 ROLLUP과 CUBE 보다 더 다양한 합계를 구할 수 있으며 조금 더 기능이 강력하다고 생각하면 된다. 그러나 처음 사용할 때는 조금 복잡하다고 생각될 수 있지만, 괄호 사용법에 대해서 조금만 이해한다면 크게 어렵지 않게 사용할 수 있다.
GROUPING SETS 사용법
합계, 총합계 구하기
SELECT job
, SUM(sal)
FROM emp
WHERE job IN ('ANALYST', 'MANAGER', 'SALESMAN')
GROUP BY GROUPING SETS(job, ())
GROUPING SETS는 그룹 칼럼을 입력하면 해당 칼럼별(job) 합계가 집계되고,
빈 괄호( () )를 입력하면 총합계가 집계된다.
칼럼별 합계 구하기
SELECT job
, deptno
, SUM(sal)
FROM emp
WHERE job IN ('ANALYST', 'MANAGER', 'SALESMAN')
GROUP BY GROUPING SETS(job, deptno)
그룹 칼럼을 여러 개(job, deptno) 입력했을 경우 그룹 칼럼의 개별 합계가 집계된다.
GROUP BY 절은 입력된 칼럼을 모두 포함하여 집계가 되지만, GROUPING SETS는 개별인 것을 기억하면 된다.
칼럼 그룹별 합계 구하기
SELECT job
, deptno
, SUM(sal)
FROM emp
WHERE job IN ('ANALYST', 'MANAGER', 'SALESMAN')
GROUP BY GROUPING SETS((job, deptno))
입력된 그룹 칼럼을 괄호로 묶으면 괄호 안의 그룹칼럼을 모두 포함한 합계가 집계된다.
GROUP BY job, dept와 동일한 결과가 조회된다.
모든 합계 구하기
SELECT job
, deptno
, SUM(sal)
FROM emp
WHERE job IN ('ANALYST', 'MANAGER', 'SALESMAN')
GROUP BY GROUPING SETS(job, deptno, (job, deptno), ())
위의 3가지 예제의 합계가 모두 집계되도록 집계 기준을 입력할 수 있다. 위의 예제는 집계할 수 있는 모든 합계를 조회한 것이다. CUBE 함수의 결과와 동일하다.
GROUPING SETS는 기준 괄호 안에 하나의 그룹 칼럼을 여러 번 사용하여 합계를 구할 수 있다. 그러나 모든 그룹 칼럼이 괄호 안에 1회 이상 작성되어야 오류가 발생하지 않는다.
GROUPING SETS는 원하는 기준을 합계만 집계할 때 유용하게 사용할 수 있으며, 괄호 사용법을 잘 이해해야 한다.