COMPUTE BY 절을 이용하면 하나의 SELECT 문으로 세부 행과 요약 행을 모두 볼 수 있습니다. 또한 하위 그룹에 대한 요약 값을 계산하거나 전체 결과 집합의 요약 값을 계산할 수 있습니다.
COMPUTE 절에는 다음 정보를 지정해야 합니다.
-
선택적 BY 키워드. 열 기준당 지정된 행 집계를 계산합니다.
-
행 집계 함수 이름. SUM, AVG, MIN, MAX 또는 COUNT가 포함됩니다.
-
행 집계 함수를 실행할 열
COMPUTE로 생성된 요약 값은 쿼리 결과에서 별도의 결과 집합으로 나타납니다. COMPUTE 절이 포함된 쿼리의 결과는 사용자가 지정한 그룹이나 구분에 따라 요약 값을 제어하는 CONTROL-BREAK 보고서와 비슷합니다. 그룹별 요약 값을 계산하고 같은 그룹에 대한 집계 함수를 두 개 이상 계산할 수도 있습니다.
선택적 BY 절과 함께 COMPUTE를 지정하면 각 그룹별로 SELECT의 조건을 충족하는 두 개의 결과 집합이 생성됩니다.
-
각 그룹의 첫 번째 결과 집합은 해당 그룹의 SELECT 목록 정보가 포함된 세부 행 집합입니다.
-
각 그룹의 두 번째 결과 집합은 해당 그룹의 COMPUTE 절에 지정된 집계 함수의 부분합이 지정된 한 행입니다.
선택적 BY 절 없이 COMPUTE를 지정해도 SELECT의 조건을 충족하는 두 개의 결과 집합이 생성됩니다.
-
각 그룹의 첫 번째 결과 집합은 SELECT 목록 정보가 포함된 모든 세부 행입니다.
-
두 번째 결과 집합은 COMPUTE 절에 지정된 집계 함수의 합계가 포함된 한 행입니다.
다음은 간단한 COMPUTE 절을 사용하여 SalesOrderDetail 테이블에서 단가와 할인액의 총계를 반환하는 SELECT 문입니다.
USE AdventureWorks2008R2;
GO
SELECT SalesOrderID, UnitPrice, UnitPriceDiscount
FROM Sales.SalesOrderDetail
ORDER BY SalesOrderID
COMPUTE SUM(UnitPrice), SUM(UnitPriceDiscount);
다음은 선택적 BY 키워드를 COMPUTE 절에 추가하여 각 판매 주문의 부분합을 반환하는 쿼리입니다.
이 SELECT 문은 각 판매 주문에 대해 두 개의 결과 집합을 반환합니다. 각 판매 주문의 첫 번째 결과 집합은 SELECT 목록에서 지정한 정보가 포함된 행 집합이고 두 번째 결과 집합은 COMPUTE 절에 지정된 두 가지 SUM 함수의 부분합입니다.
참고 |
---|
osql과 같은 유틸리티는 각 부분합이 결과 집합에서 별도의 행으로 보이도록 여러 개의 부분합이나 합계 요약을 표시합니다. 이것은 유틸리티에서 결과를 표시하는 방식 때문이며 부분합이나 합계는 한 행에 반환됩니다. SQL Server Management Studio와 같은 응용 프로그램에서는 여러 종류의 집계를 같은 줄에 표시합니다.
|
COMPUTE와 GROUP BY의 차이를 요약하면 다음과 같습니다.
-
GROUP BY는 단일 결과 집합을 반환합니다. 각 그룹별로 그룹화 열과 해당 그룹의 하위 집계를 보여 주는 집계 함수가 포함된 하나의 행이 있습니다. SELECT 목록에는 그룹화 열과 집계 함수만 포함될 수 있습니다.
-
COMPUTE는 여러 결과 집합을 반환합니다. 각 그룹별로 SELECT 목록의 식이 있는 세부 행이 포함된 결과 집합과 그룹의 하위 집계나 SELECT 문의 합계가 포함된 결과 집합이 있습니다. SELECT 목록에는 그룹화 열이나 집계 함수가 아닌 식이 포함될 수 있으며 집계 함수는 SELECT 목록이 아니라 COMPUTE 절에 지정됩니다.
다음은 GROUP BY와 집계 함수를 사용하는 쿼리입니다. 이 쿼리는 각 그룹별로 해당 그룹의 부분합이 포함된 행이 있는 단일 결과 집합을 반환합니다.
USE AdventureWorks2008R2; GO SELECT SalesOrderID, SUM(UnitPrice), SUM(UnitPriceDiscount) FROM Sales.SalesOrderDetail GROUP BY SalesOrderID;
참고 |
---|
COMPUTE나 COMPUTE BY 절에는 ntext, text 또는 image 데이터 형식을 포함할 수 없습니다. |
'프로그래밍 > DataBase' 카테고리의 다른 글
[ORACLE] 달력만들기 (0) | 2014.04.01 |
---|---|
[DB] transaction, commit, rollback (0) | 2014.02.12 |
OpenTSDB: Scalable time-series database (0) | 2013.11.21 |
[DB] RocksDB: Persistent key-value store for fast storage http://ow.ly/2BzPfY (0) | 2013.11.20 |
[MSSQL] getdate()에 1초 더하기 (0) | 2013.11.08 |