[SQL] ROLLUP, CUBE ORACLE/SQL 2012. 3. 29. 17:22

둘다 누적에 대한 통계에 이용하면 편리한 내용이다.

ROLLUP의 경우 각 해당하는 분야에 대하여 데이터가 있다면 누적이 되서 그 기준에 대하여 통계를 나타낸다.

다음은 그 예제이다.

SELECT A.NAME, A.TITLE, SUM(B.QTY)

FROM t_table A, t_table_sec B

WHERE A.ID = B.ID

GROUP BY ROLLUP (A.NAME, A.TITLE)

위 쿼리에 대한 결과는 대략 아래와 같다.

A.NAME        A.TITLE      QTY

-------         -------      -----

JIM              A                     3

JIM              B                     2

JIM                                     5

BOBBY        C                     1

BOBBY        A                     2

BOBBY                               3

                                         8

하지만 각기 TITLE별의 총 합을 보려면 TITLE에 대한 것만 또다시 SELECT 하여 ROLLUP 한 것을 UNION 키셔 줘야한다. 즉 두번의 ROLLUP이 들어간다는 것이다.

하지만 큐브를 사용하면 아래와 같은 결과를 가질 수가 있다.

 

SELECT A.NAME, A.TITLE, SUM(B.QTY)

FROM t_table A, t_table_sec B

WHERE A.ID = B.ID

GROUP BY CUBE (A.NAME, A.TITLE)

A.NAME        A.TITLE      QTY

-------         -------      -----

JIM              A                     3

JIM              B                     2

JIM                                     5

BOBBY        C                     1

BOBBY        A                     2

BOBBY                               3

                  A                     5

                  B                     2

                  C                     1