次の方法で共有


SUM(Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (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)

定数、列、または関数、および算術演算子、ビット演算子、および文字列演算子の任意の組み合わせ。 expression は、bit データ型を除く、真数データ型または概数データ型の式です。 集計関数とサブクエリは許可されません。 詳細については、「」をご覧ください。

オーバー([ partition_by_clause ][ order_by_clause ])

partition_by_clause は、 FROM 句によって生成された結果セットを、関数が適用されるパーティションに分割します。 指定しない場合、関数ではクエリ結果セットのすべての行を 1 つのグループとして扱います。

order_by_clause 操作が実行される論理的順序を決定します。 詳細については、「 SELECT - OVER 句」を参照してください。

戻り値の型

最も有効桁数の大きい expression のデータ型で、すべての expression 値の合計を返します。

式の結果 の戻り値の型 :
tinyint int
smallint int
int int
bigint bigint
decimal カテゴリ (p, s) 小数点(38、s)
money および smallmoney カテゴリ money
float および real カテゴリ float

注釈

SUM は、 OVER 句と ORDER BY 句なしで使用する場合の決定論的関数です。 OVER句と ORDER BY 句で指定した場合は、非決定的です。 詳細については、「決定的関数と非決定的関数」を参照してください。

また、SUMデータ型で使うと、非決定性関数のように振る舞うかもしれません。 しかし、基になる理由は、これらのデータ型のおおよその性質です。

この記事のコード サンプルでは、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. オーバー節を使う

以下の例では、OVER節付きの SUM 関数を用いて、AdventureWorks2025 データベースのSales.SalesPerson表にある各地域ごとに年間売上の累積合計を提供します。 データは TerritoryID によってパーティションに分割され、SalesYTD によって論理的に順序付けされます。 つまり、 SUM 関数は、販売年に基づいて各担当地域に対して計算されます。 TerritoryID 1 の場合、2005 年の売上には、その年の売上を持つ 2 人の営業担当者を表す 2 つの行があります。 これら 2 つの行の合計売上の累積値が計算され、2006 年の売上を表す 3 番目の行が計算に含まれます。

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、Analytics Platform System (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