Fonctions d’agrégation - sumAggregate Functions - sum

CETTE RUBRIQUE S’APPLIQUE À : ouiSQL Server (à partir de la version 2012)nonAzure SQL DatabasenonAzure SQL Data WarehousenonParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2012)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Retourne la somme d'une série de nombres.Returns the sum of a sequence of numbers.

SyntaxeSyntax


fn:sum($arg as xdt:anyAtomicType*) as xdt:anyAtomicType  

ArgumentsArguments

$arg$arg
Série de valeurs atomiques dont la somme est à calculer.Sequence of atomic values whose sum is to be computed.

NotesRemarks

Tous les types de valeurs atomisées transmises à sum() doivent être des sous-types du même type de base.All types of the atomized values that are passed to sum() have to be subtypes of the same base type. Les types de base acceptés sont les trois types de base numériques intégrés ou xdt:untypedAtomic.Base types that are accepted are the three built-in numeric base types or xdt:untypedAtomic. Les valeurs de type xdt:untypedAtomic sont converties en xs:double.Values of type xdt:untypedAtomic are cast to xs:double. S’il existe un mélange de ces types, ou si d’autres valeurs d’autres types sont passés, une erreur statique est déclenchée.If there is a mixture of these types, or if other values of other types are passed, a static error is raised.

Le résultat de sum() reçoit le type de base des types transmis tel que xs : double dans le cas de xdt : untypedAtomic, même si l’entrée est éventuellement la séquence vide.The result of sum() receives the base type of the passed in types such as xs:double in the case of xdt:untypedAtomic, even if the input is optionally the empty sequence. Si l'entrée est vide statiquement, le résultat est 0 avec le type statique et dynamique de xs:integer.If the input is statically empty, the result is 0 with the static and dynamic type of xs:integer.

Le sum() fonction renvoie la somme des valeurs numériques.The sum() function returns the sum of the numeric values. Si une valeur xdt : untypedAtomic ne peut pas être convertie en xs : double, la valeur est ignorée dans la séquence d’entrée, $arg.If an xdt:untypedAtomic value cannot be cast to xs:double, the value is ignored in the input sequence, $arg. Si l'entrée est une séquence vide calculée dynamiquement, la valeur 0 du type de base utilisé est retournée.If the input is a dynamically calculated empty sequence, the value 0 of the used base type is returned.

La fonction retourne une erreur d'exécution en cas d'exception de dépassement de capacité ou de valeur hors limite.The function returns a runtime error when an overflow or out of range exception occurs.

ExemplesExamples

Cette rubrique fournit des exemples de XQuery relatifs à des instances XML stockés dans différentes xml type des colonnes dans le AdventureWorks2012AdventureWorks2012 base de données.This topic provides XQuery examples against XML instances that are stored in various xml type columns in the AdventureWorks2012AdventureWorks2012 database.

A.A. Utilisation de la fonction XQuery sum() pour rechercher le nombre total d'heures de travail pour tous les ateliers inclus dans le processus de fabricationUsing the sum() XQuery function to find the total combined number of labor hours for all work center locations in the manufacturing process

La requête ci-dessous permet de trouver le nombre total d'heures de travail pour tous les ateliers inclus dans le processus de fabrication de tous les modèles de produits pour lesquels des instructions de fabrication sont stockées.The following query finds the total labor hours for all work center locations in the manufacturing process of all product models for which manufacturing instructions are stored.

SELECT Instructions.query('         
   declare namespace AWMI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";         
  <ProductModel PMID= "{ sql:column("Production.ProductModel.ProductModelID") }"         
  ProductModelName = "{ sql:column("Production.ProductModel.Name") }" >         
   <TotalLaborHrs>         
     { sum(//AWMI:Location/@LaborHours) }         
   </TotalLaborHrs>         
 </ProductModel>         
    ') as Result         
FROM Production.ProductModel         
WHERE Instructions is not NULL         

Le résultat partiel est le suivant.This is the partial result.

<ProductModel PMID="7" ProductModelName="HL Touring Frame">  
   <TotalLaborHrs>12.75</TotalLaborHrs>  
</ProductModel>  
<ProductModel PMID="10" ProductModelName="LL Touring Frame">  
  <TotalLaborHrs>13</TotalLaborHrs>  
</ProductModel>  
...  

Au lieu de retourner le résultat au format XML, vous pouvez écrire la requête pour générer des résultats relationnels, comme l'illustre la requête suivante :Instead of returning the result as XML, you can write the query to generate relational results, as shown in the following query:

SELECT ProductModelID,         
        Name,         
        Instructions.value('declare namespace   
      AWMI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";         
    sum(//AWMI:Location/@LaborHours)', 'float') as TotalLaborHours         
FROM Production.ProductModel         
WHERE Instructions is not NULL          

Voici un extrait du résultat :This is a partial result:

ProductModelID Name                 TotalLaborHours         
-------------- -------------------------------------------------  
7              HL Touring Frame           12.75                   
10             LL Touring Frame           13                      
43             Touring Rear Wheel         3                       
...  

Limites de mise en œuvreImplementation Limitations

Les limitations suivantes s'appliquent :These are the limitations:

  • Seule la version de l’argument unique de sum() est pris en charge.Only the single argument version of sum() is supported.

  • Si l'entrée est une séquence vide calculée dynamiquement, la valeur 0 du type de base utilisé est retournée à la place du type xs:integer.If the input is a dynamically calculated empty sequence, the value 0 of the used base type is returned instead of type xs:integer.

  • Le sum() fonction mappe tous les entiers à xs : decimal.The sum() function maps all integers to xs:decimal.

  • Le sum() fonction sur des valeurs de type xs : Duration n’est pas pris en charge.The sum() function on values of type xs:duration is not supported.

  • Les séquences faisant intervenir plusieurs types dérivés de différents types de base ne sont pas prises en charge.Sequences that mix types across base type boundaries are not supported.

  • L'expression sum((xs:double(“INF”), xs:double(“-INF”))) génère une erreur de domaine.The sum((xs:double(“INF”), xs:double(“-INF”))) raises a domain error.

Voir aussiSee Also

Fonctions XQuery impliquant le type de données xmlXQuery Functions against the xml Data Type