Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Point de terminaison d’analytique SQL dans Microsoft Fabric
Entrepôt dans Microsoft Fabric
Base de données SQL dans Microsoft Fabric
Retourne la somme de toutes les valeurs, ou seulement des DISTINCT valeurs, dans l’expression.
SUM peut être utilisé uniquement avec des colonnes numériques. Les valeurs NULL sont ignorées.
Conventions de la syntaxe Transact-SQL
Syntaxe
-- Aggregate Function Syntax
SUM ( [ ALL | DISTINCT ] expression )
-- Analytic Function Syntax
SUM ( [ ALL ] expression) OVER ( [ partition_by_clause ] [ order_by_clause ] )
Arguments
ALL
Applique la fonction d'agrégation à toutes les valeurs.
ALL est la valeur par défaut.
DISTINCT
Spécifie que SUM renvoie la somme des valeurs uniques.
expression
Constante, colonne ou fonction, et toute combinaison d’opérateurs arithmétiques, au niveau du bit et de chaîne. expression est une expression de la catégorie de type de données numérique exacte ou approximative, à l’exception du type de données bit . Les fonctions d’agrégation et les sous-requêtes ne sont pas autorisées. Pour plus d’informations, consultez Expressions.
TERMINÉ ( [ partition_by_clause ] [ order_by_clause ] )
partition_by_clause divise le jeu de résultats généré par la FROM clause en partitions auxquelles la fonction est appliquée. S'il n'est pas spécifié, la fonction gère toutes les lignes du jeu de résultats de la requête en un seul groupe.
order_by_clause détermine l’ordre logique dans lequel l’opération est effectuée. Pour plus d’informations, consultez la clause SELECT - OVER.
Types de retour
Renvoie le total de toutes les valeurs expression dans le type de données expression le plus précis.
| Résultat de l'expression | Type de retour |
|---|---|
| tinyint | int |
| smallint | int |
| int | int |
| bigint | bigint |
| Catégorie decimal (p, s) | décimal (38, s) |
| Catégorie money et smallmoney | money |
| Catégorie float et real | float |
Remarques
SUMest une fonction déterministe lorsqu’elle est utilisée sans les clauses et OVER les ORDER BY clauses. Il n’est pas déterministe lorsqu’il est spécifié avec les clauses et OVER les ORDER BY clauses. Pour plus d’informations, consultez Fonctions déterministes et non déterministes.
De plus, SUM cela peut sembler agir comme une fonction non déterministe lorsqu’on l’utilise avec des types de données float et réels . Mais la raison sous-jacente est la nature approximative de ces types de données.
Exemples
Les exemples de code de cet article utilisent les bases de données d'exemple AdventureWorks2025 ou AdventureWorksDW2025, que vous pouvez télécharger à partir de la page d'accueil Microsoft SQL Server Samples and Community Projects.
R. Utiliser la somme pour retourner les données résumées
Les exemples suivants montrent l’utilisation de la fonction SUM pour renvoyer des données résumées dans la base de données AdventureWorks2025.
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
Voici le jeu de résultats.
Color
--------------- --------------------- ---------------------
Black 27404.84 5214.9616
Silver 26462.84 14665.6792
White 19.00 6.7926
B. Utilisez la clause over
L’exemple suivant utilise la SUM fonction avec la OVER clause pour fournir un total cumulatif des ventes annuelles pour chaque territoire dans le Sales.SalesPerson tableau de la base de données AdventureWorks2025. Les données sont partitionnées par TerritoryID et classées logiquement par SalesYTD. Cela signifie que la SUM fonction est calculée pour chaque territoire en fonction de l’année des ventes. Pour TerritoryID 1, il y a deux lignes pour l’année de vente 2005 représentant les deux vendeurs avec des ventes cette année. La valeur cumulée des ventes totales de ces deux lignes est calculée, puis la troisième ligne représentant les ventes de l’année 2006 est incluse dans le calcul.
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;
Voici le jeu de résultats.
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
Dans cet exemple, la OVER clause n’inclut PARTITION BYpas . Cela signifie que la fonction est appliquée à toutes les lignes retournées par la requête. La ORDER BY clause spécifiée dans la OVER clause détermine l’ordre logique auquel la SUM fonction est appliquée. La requête restitue un total cumulatif des ventes par année pour tous les territoires de vente spécifiés dans la WHERE clause. La ORDER BY clause spécifiée dans l’instruction SELECT détermine l’ordre dans lequel les lignes de la requête sont affichées.
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;
Voici le jeu de résultats.
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
Exemples : Azure Synapse Analytics et Analytics Platform System (PDW)
C. Exemple simple de SUM
L’exemple suivant renvoie le nombre total de chaque produit vendu durant l’année 2003.
-- Uses AdventureWorks
SELECT ProductKey,
SUM(SalesAmount) AS TotalPerProduct
FROM dbo.FactInternetSales
WHERE OrderDateKey >= '20030101'
AND OrderDateKey < '20040101'
GROUP BY ProductKey
ORDER BY ProductKey;
Voici un jeu de résultats partiel.
ProductKey TotalPerProduct
---------- ---------------
214 31421.0200
217 31176.0900
222 29986.4300
225 7956.1500
D. Calculer les totaux de groupe avec plus d’une colonne
L'exemple suivant calcule la somme de ListPrice et StandardCost pour chaque couleur répertoriée dans la table Product.
-- Uses AdventureWorks
SELECT Color,
SUM(ListPrice) AS TotalList,
SUM(StandardCost) AS TotalCost
FROM dbo.DimProduct
GROUP BY Color
ORDER BY Color;
La première partie de l’ensemble de résultats est présentée dans les résultats suivants :
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