Share via


集計関数 - sum

適用対象:SQL Server

一連の数値の合計を返します。

構文

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

引数

$arg
合計が計算されるアトミック値のシーケンス。

解説

sum() に渡されるアトミック化された値のすべての型は、同じ基本型のサブタイプである必要があります。 使用できる基本データ型は、3 つの組み込みの数値基本データ型または xdt:untypedAtomic です。 xdt:untypedAtomic 型の値は xs:double にキャストされます。 これらの型が混在している場合、または他の型の他の値が渡された場合は、静的エラーが発生します。

sum() の結果は、xdt:untypedAtomic の場合、入力が必要に応じて空のシーケンスである場合でも、xs:double などの渡された型の基本型を受け取ります。 入力が静的に空の場合、結果は静的な型および動的な型 xs:integer の 0 になります。

sum() 関数は、数値の合計を返します。 xdt:untypedAtomic 値を xs:double にキャストできない場合、入力シーケンスでは値は無視 $arg。 入力が動的に計算された空のシーケンスの場合は、使用される基本型の値 0 が返されます。

オーバーフローまたは範囲外の例外が発生したとき、関数は実行時エラーを返します。

このトピックでは、データベース内のさまざまな xml 型の列に格納されている XML インスタンスに対する XQuery の例を AdventureWorks2022 示します。

A. sum() XQuery 関数を使用した、製造プロセス内のすべてのワーク センターの場所での合計労働時間の計算

次のクエリでは、製造手順が格納されているすべての製品モデルの製造プロセスにおける、すべてのワーク センターの場所での合計労働時間を計算します。

SELECT Instructions.query('         
   declare namespace AWMI="https://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         

次に結果の一部を示します。

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

結果を XML として返す代わりに、次のクエリに示すように、リレーショナル結果を生成するクエリを記述できます。

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

これは部分的な結果です。

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

実装の制限事項

制限事項は次のとおりです。

  • sum() の単一引数バージョンのみがサポートされています。

  • 入力が動的に計算された空のシーケンスの場合は、xs:integer 型ではなく、使用される基本型の値 0 が返されます。

  • sum() 関数は、すべての整数を xs:decimal にマップします。

  • xs:duration 型の値に対する sum() 関数はサポートされていません。

  • 基本データ型の境界を超えて複数の型が混在するシーケンスはサポートされません。

  • sum((xs:double("INF"), xs:double("-INF"))) はドメイン エラーを発生させます。

参照

xml データ型に対する XQuery 関数