- 부서별, 직업별 급여의 합
SELECT
DEPTNO
,JOB
,SUM(SAL)
FROM EMP
GROUP BY DEPTNO, JOB;
SELECT
DEPTNO
,JOB
,SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO, JOB);
TIP>> 전체 급여의 합만 보여주고 싶거나, 부서별로 합만 보여주고 싶을 땐??
SELECT DEPTNO ,JOB ,SUM(SAL) FROM EMP GROUP BY ROLLUP((DEPTNO, JOB));
SELECT
DEPTNO
,JOB
,SUM(SAL)
FROM EMP
GROUP BY DEPTNO, ROLLUP(JOB);
각 번호는 해당 칼럼으로 GROUP BY를 한 결과
첫번째 GROUP BY절 같은 경우는 총 4개의 GROUP
- ROLLUP의 인자로 들어온 칼럼을 오른쪽부터 하나씩 빼면서 GROUP을 만듭니다.
- "()"의 의미는 GROUP이 없는 즉, 전체에 대한 결과를 출력한다는 뜻 입니다. EX(SUM 함수 사용하면 전체 SUM 구한다는 뜻)
- 괄호로 묶여져 있는 컬럼은 하나로 본다는 뜻 입니다.
- ROLLUP 이전에 일반 컬럼과 GROUP BY 한다면, 일반 컬럼은 끝까지 남습니다.
GROUP BY ROLLUP(A, B, C) 예시
SELECT
DEPTNO
,JOB
,ENAME
,SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO,JOB,ENAME);
SELECT
DEPTNO
,JOB
,ENAME
,SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO,(JOB,ENAME));
SELECT
DEPTNO
,JOB
,ENAME
,SUM(SAL)
FROM EMP
GROUP BY DEPTNO,ROLLUP((JOB,ENAME));
ROLLUP이라는 뜻은 말아올리다라는 뜻으로, 분류된걸 말아서 몰두 합계를 낸다.
예를 들어, 'GROUP BY 성별' 성별 기준으로 묶어서, 남자 총 몇명, 여자 총 몇명 알려준다면....
ROLLUP 함수는 남자 총 몇명, 여자 총 몇명 그룹된 데이터 뿐만아니라 이둘을 더해 모두 몇명 이런식으로 분류전체 그룹된 개수를 보여줌. GROUP BY 함수와 같이 사용
--> ROLLUP 함수는 인수의 순서에도 영향을 받게 된다.
--> ROLLUP은 일반적인 누적에 대한 총계를 구할 때 아주 편리하게 사용 할 수 있다.
SELECT DEPT_CODE, JOB_CODE, SUM(SALARY)
FROM EMPLOYEE
GROUP BY CUBE(DEPT_CODE, JOB_CODE)
ORDER BY 1;
--> CUBE 함수는 인자의 순서의 상관없이 사용
--> 보통 CUBE는 Cross-Tab에 대한 Summary를 추출하는데 사용 된다
SELECT 상품ID, 월, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY GROUPING SETS(상품ID, 월);
첫번째 인자(상품ID)별 소계(SUBTOTAL), 두번째 인자(월)별 소계(SUBTOTAL)이 나오는 것을 확인할 수 있다.
ROLLUP과 CUBE와 달리 계층 구조가 나타나지 않으며 따라서 인자의 순서가 달라도 결과는 똑같다.
또한, GROUPING SETS 함수는 괄호로 묶은 집합별로도 집계를 구할 수 있다.
SELECT 상품ID, 월, 회사, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY GROUPING SETS((상품ID, 월), 회사);