ROLLUP을 사용하여 데이터 요약
ROLLUP 연산자는 부분합과 합계가 포함된 보고서를 생성할 때 유용합니다. ROLLUP 연산자는 CUBE 연산자에서 생성된 결과 집합과 비슷한 결과 집합을 생성합니다. 자세한 내용은 큐브를 사용한 데이터 요약을 참조하십시오.
CUBE와 ROLLUP 연산자의 차이는 다음과 같습니다.
- CUBE는 선택한 열에서 모든 값의 조합에 대한 집계가 포함된 결과 집합을 생성합니다.
- ROLLUP은 선택한 열에서 값의 계층에 대한 집계가 포함된 결과 집합을 생성합니다.
예를 들어 Inventory라는 단순 테이블에는 다음이 포함되어 있습니다.
Item Color Quantity
-------------------- -------------------- --------------------------
Table Blue 124
Table Red 223
Chair Blue 101
Chair Red 210
다음은 부분합 보고서를 생성하는 쿼리입니다.
SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
ELSE ISNULL(Item, 'UNKNOWN')
END AS Item,
CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
ELSE ISNULL(Color, 'UNKNOWN')
END AS Color,
SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item, Color WITH ROLLUP
Item Color QtySum
-------------------- -------------------- --------------------------
Chair Blue 101.00
Chair Red 210.00
Chair ALL 311.00
Table Blue 124.00
Table Red 223.00
Table ALL 347.00
ALL ALL 658.00
(7 row(s) affected)
쿼리에서 ROLLUP
키워드를 CUBE
로 변경할 경우 끝에 다음 두 행이 추가로 반환되는 것을 제외하면 CUBE
결과 집합은 동일합니다.
ALL Blue 225.00
ALL Red 433.00
CUBE
연산은 Item
및 Color
값의 모든 가능한 조합에 대해 행을 생성합니다. 예를 들어 CUBE
는 Item
값 Chair
와 Color
값의 모든 가능한 조합(Red
, Blue
및 Red
+ Blue
)을 보고할 뿐만 아니라 Color
값 Red
와 Item
값의 모든 가능한 조합(Chair
, Table
및 Chair
+ Table
)을 보고합니다.
GROUP BY
절의 오른쪽에 지정된 열의 각 값에 대해 ROLLUP
연산은 왼쪽 열 값의 모든 가능한 조합을 보고하지 않습니다. 예를 들어 ROLLUP
은 각 Color
값에 대해 Item
값의 모든 가능한 조합을 보고하지 않습니다.
ROLLUP 연산의 결과 집합은 COMPUTE BY로 반환된 결과 집합과 비슷한 기능을 합니다. 그러나 ROLLUP 연산에는 다음과 같은 장점이 있습니다.
- ROLLUP은 단일 결과 집합을 반환하지만 COMPUTE BY는 여러 결과 집합을 반환하므로 응용 프로그램 코드가 복잡해집니다.
- ROLLUP은 서버 커서에서 사용할 수 있지만 COMPUTE BY는 사용할 수 없습니다.
- 쿼리 최적화 프로그램이 COMPUTE BY 실행 계획보다 효율적인 ROLLUP 실행 계획을 생성할 수 있습니다.
참고 항목
개념
COMPUTE 및 COMPUTE BY를 사용한 데이터 요약