본문 바로가기

배우기/복습노트[oracle sql]

[복습] SQL | Oracle GROUP BY 의 함수 종류(GROUPING SETS, ROLLUP, CUBE)

728x90
반응형

GROUP BY 절에서 가능한 함수를 알아보겠다.

부분합 출력이 목적이며, GROUP BY 결과에 추가적으로 요약된 값을 출력한다.

 

1. GROUPING SETS(A, B,...) → (A별) + (B별)

A별 + B별 합집합을 출력한다(각각 그룹핑 연산 결과를 UNION ALL로 표현이 가능하다).

나열 순서는 중요하지 않으며, ()를 쓰지 않고는 전체 통계가 출력되지 않는다. ()나 NULL로 전달하여야 출력된다.

 

먼저 우리가 기존에 그룹연산을 하는 방법이다.

예) DEPTNO, JOB 별

 

GROUPING SETS를 이용하면 아래와 같다.

 

DEPTNO별 JOB별 각각 출력된다.

 

이것을 

SELECT DEPTNO, SUM(SAL)
   FROM EMP
 GROUP BY DEPTNO;

SELECT JOB, SUM(SAL)
  FROM EMP
 GROUP BY JOB;

각각의 합집합으로 표현할 수 있는데, 

UNION ALL로 똑같이 출력할 수 있다.

 

 

DEPTNO, JOB별 소계와 함께 출력하면 아래처럼 나타낼 수 있다.

(GROUP BY DEPTNO) + (GROUP BY JOB) + (GROUP BY DEPTNO, JOB) 이렇게 세 집합이 결합된 것이다.

 

 

DEPTNO, JOB별 소계와 전체 총계를 출력해보자.

 

 

그 다음 (DEPTNO + JOB별) +  DEPTNO별 소계만 출력하여보자.

 

 

보통 시험문제로는 아래의 출력 결과를 얻으려면 GROUP BY 절에 어떤 내용이 들어가야 하는지가 나온다.

 

 

2. ROLLUP(A. B. ...) → (A별) + (A, B별) + 전체(B별은 안나옴)

그래서 나열 순서가 중요하다.

전체 소계가 자동으로 출력된다(NULL이나 ()를 쓰지 않아도 됨).

 

 

DEPTNO별 + (DEPTNO, JOB별) 출력하여보자.

 

반대로 JOB별 + (DEPTNO, JOB별) 출력하여보자.

 

이 또한  UNION ALL로도 가능하다.

 

 

3. CUBE(A, B) → (A별) + (B별) + (A, B)별, 전체

나열 순서는 중요하지 않다.

 

테스트를 하여 살펴보자.

 

 

 

시험에 필수적으로 나오는 내용이니 암기해두자.

728x90
반응형