다음을 통해 공유


SUM(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics분석 플랫폼 시스템(PDW)Microsoft Fabric의 SQL 분석 엔드포인트Microsoft Fabric의 웨어하우스Microsoft Fabric의 SQL 데이터베이스

표현식의 모든 값 또는 값들의 DISTINCT 합을 반환합니다. SUM 숫자 열로만 사용할 수 있습니다. Null 값은 무시됩니다.

Transact-SQL 구문 표기 규칙

구문

-- Aggregate Function Syntax
SUM ( [ ALL | DISTINCT ] expression )

-- Analytic Function Syntax
SUM ( [ ALL ] expression) OVER ( [ partition_by_clause ] [ order_by_clause ] )

인수

ALL

모든 값에 집계 함수를 적용합니다. ALL 기본값입니다.

DISTINCT

이 함수 SUM 는 고유 값들의 합을 반환한다고 명시합니다.

expression

상수, 열 또는 함수 및 산술, 비트 및 문자열 연산자의 조합입니다. expressionbit 데이터 형식을 제외한 정확한 수치 또는 근사치 데이터 형식 범주의 식입니다. 집계 함수 및 하위 쿼리는 허용되지 않습니다. 자세한 내용은 을 참조하세요.

오버 ([ partition_by_clause ] [ order_by_clause ] )

partition_by_clause 절에서 생성된 결과 집합을 FROM 함수가 적용되는 파티션으로 나눕니다. 지정하지 않을 경우 쿼리 결과 집합의 모든 행이 단일 그룹으로 취급됩니다.

order_by_clause는 작업이 수행되는 논리적 순서를 결정합니다. 자세한 내용은 SELECT - OVER 절을 참조하세요.

반환 형식

가장 정확한 expression 데이터 형식에서 모든 expression 값의 합계를 반환합니다.

식 결과 반환 형식
tinyint int
smallint int
int int
bigint bigint
decimal 범주(p, s) 십진법(38, s)
moneysmallmoney 범주 money
floatreal 범주 float

설명

SUM는 and OVER 절 없이 ORDER BY 사용할 때 결정적 함수입니다. and OVER 절로 ORDER BY 지정하면 비결정적입니다. 자세한 내용은 결정적 함수와 비결정적 함수를 참조하세요.

또한, SUMfloat 데이터와 실 수 데이터 타입을 사용할 때 비결정성 함수처럼 보일 수 있습니다. 그러나 기본 이유는 이러한 데이터 형식의 대략적인 특성입니다.

예제

이 문서의 코드 샘플은 AdventureWorks2025 또는 AdventureWorksDW2025 샘플 데이터베이스를 사용합니다. 이 데이터베이스는 Microsoft SQL Server 샘플 및 커뮤니티 프로젝트 홈페이지에서 다운로드할 수 있습니다.

A. sum을 사용하여 요약 데이터를 반환합니다

다음 예시들은 AdventureWorks2025 데이터베이스에서 요약 데이터를 반환하기 위해 SUM 함수를 사용하는 모습을 보여줍니다.

SELECT Color, SUM(ListPrice), SUM(StandardCost)
FROM Production.Product
WHERE Color IS NOT NULL
    AND ListPrice != 0.00
    AND Name LIKE 'Mountain%'
GROUP BY Color
ORDER BY Color;
GO

결과 집합은 다음과 같습니다.

Color
--------------- --------------------- ---------------------
Black           27404.84              5214.9616
Silver          26462.84              14665.6792
White           19.00                 6.7926

B. 오버 조항을 사용하세요

다음 예시는 AdventureWorks2025 데이터베이스 내 테이블에 있는 Sales.SalesPerson 각 지역의 연간 매출 누적 총계를 제공하는 절이 포함된 OVER 함수를 사용합니다SUM. 데이터는 TerritoryID를 기준으로 분할되고 SalesYTD를 기준으로 논리적으로 정렬됩니다. 즉, SUM 함수는 판매 연도에 따라 각 지역에 대해 계산됩니다. 1의 경우 TerritoryID 2005년 영업 연도에는 해당 연도에 판매된 두 명의 영업 사원을 나타내는 두 개의 행이 있습니다. 이 두 행의 누적 총 판매액 값이 계산된 다음 2006년 매출을 나타내는 세 번째 행이 계산에 포함됩니다.

SELECT BusinessEntityID,
       TerritoryID,
       DATEPART(yy, ModifiedDate) AS SalesYear,
       CONVERT (VARCHAR (20), SalesYTD, 1) AS SalesYTD,
       CONVERT (VARCHAR (20), AVG(SalesYTD) OVER (PARTITION BY TerritoryID ORDER BY DATEPART(yy, ModifiedDate)), 1) AS MovingAvg,
       CONVERT (VARCHAR (20), SUM(SalesYTD) OVER (PARTITION BY TerritoryID ORDER BY DATEPART(yy, ModifiedDate)), 1) AS CumulativeTotal
FROM Sales.SalesPerson
WHERE TerritoryID IS NULL
      OR TerritoryID < 5
ORDER BY TerritoryID, SalesYear;

결과 집합은 다음과 같습니다.

BusinessEntityID TerritoryID SalesYear   SalesYTD             MovingAvg            CumulativeTotal
---------------- ----------- ----------- -------------------- -------------------- --------------------
274              NULL        2005        559,697.56           559,697.56           559,697.56
287              NULL        2006        519,905.93           539,801.75           1,079,603.50
285              NULL        2007        172,524.45           417,375.98           1,252,127.95
283              1           2005        1,573,012.94         1,462,795.04         2,925,590.07
280              1           2005        1,352,577.13         1,462,795.04         2,925,590.07
284              1           2006        1,576,562.20         1,500,717.42         4,502,152.27
275              2           2005        3,763,178.18         3,763,178.18         3,763,178.18
277              3           2005        3,189,418.37         3,189,418.37         3,189,418.37
276              4           2005        4,251,368.55         3,354,952.08         6,709,904.17
281              4           2005        2,458,535.62         3,354,952.08         6,709,904.17

이 예제에서는 절에 OVER .가 포함되지 PARTITION BY않습니다. 즉, 함수는 쿼리에서 반환된 모든 행에 적용됩니다. 절에 ORDER BY 지정된 절은 OVER 함수가 적용되는 논리적 순서를 SUM 결정합니다. 쿼리는 조항에 명시된 WHERE 모든 판매 구역의 연도별 누적 매출 총계를 반환합니다. 문에 ORDER BY 지정된 절은 SELECT 쿼리 행이 표시되는 순서를 결정합니다.

SELECT BusinessEntityID,
       TerritoryID,
       DATEPART(yy, ModifiedDate) AS SalesYear,
       CONVERT (VARCHAR (20), SalesYTD, 1) AS SalesYTD,
       CONVERT (VARCHAR (20), AVG(SalesYTD) OVER (ORDER BY DATEPART(yy, ModifiedDate)), 1) AS MovingAvg,
       CONVERT (VARCHAR (20), SUM(SalesYTD) OVER (ORDER BY DATEPART(yy, ModifiedDate)), 1) AS CumulativeTotal
FROM Sales.SalesPerson
WHERE TerritoryID IS NULL
      OR TerritoryID < 5
ORDER BY SalesYear;

결과 집합은 다음과 같습니다.

BusinessEntityID TerritoryID SalesYear   SalesYTD             MovingAvg            CumulativeTotal
---------------- ----------- ----------- -------------------- -------------------- --------------------
274              NULL        2005        559,697.56           2,449,684.05         17,147,788.35
275              2           2005        3,763,178.18         2,449,684.05         17,147,788.35
276              4           2005        4,251,368.55         2,449,684.05         17,147,788.35
277              3           2005        3,189,418.37         2,449,684.05         17,147,788.35
280              1           2005        1,352,577.13         2,449,684.05         17,147,788.35
281              4           2005        2,458,535.62         2,449,684.05         17,147,788.35
283              1           2005        1,573,012.94         2,449,684.05         17,147,788.35
284              1           2006        1,576,562.20         2,138,250.72         19,244,256.47
287              NULL        2006        519,905.93           2,138,250.72         19,244,256.47
285              NULL        2007        172,524.45           1,941,678.09         19,416,780.93

예: Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)

C. 간단한 SUM 예

다음 예는 2003년 판매된 각 제품의 총 수를 반환합니다.

-- Uses AdventureWorks
SELECT ProductKey,
       SUM(SalesAmount) AS TotalPerProduct
FROM dbo.FactInternetSales
WHERE OrderDateKey >= '20030101'
      AND OrderDateKey < '20040101'
GROUP BY ProductKey
ORDER BY ProductKey;

다음은 결과 집합의 일부입니다.

ProductKey  TotalPerProduct
----------  ---------------
214         31421.0200
217         31176.0900
222         29986.4300
225          7956.1500

D. 열 이상을 가진 그룹 총합을 계산하세요

다음 예에서는 ListPrice 테이블에 나열된 각 색에 대한 StandardCostProduct의 합계를 계산합니다.

-- Uses AdventureWorks
SELECT Color,
       SUM(ListPrice) AS TotalList,
       SUM(StandardCost) AS TotalCost
FROM dbo.DimProduct
GROUP BY Color
ORDER BY Color;

결과 집합의 첫 번째 부분은 다음 결과들로 나타난다:

Color       TotalList      TotalCost
----------  -------------  --------------
Black       101295.7191    57490.5378
Blue         24082.9484    14772.0524
Grey           125.0000       51.5625
Multi          880.7468      526.4095
NA            3162.3564     1360.6185