다음을 통해 공유


집계 함수 - sum

적용 대상: SQL Server

숫자 시퀀스의 합계를 반환합니다.

구문

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

인수

$arg
합계를 계산할 원자성 값의 시퀀스입니다.

설명

sum()에 전달되는 원자화된 값의 모든 형식은 동일한 기본 형식의 하위 형식이어야 합니다. 허용되는 기본 형식은 세 가지 기본 제공 숫자 기본 형식 또는 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()단일 인수 버전만 지원됩니다.

  • 입력이 동적으로 계산된 빈 시퀀스인 경우 사용된 기준 유형의 값 0이 xs:integer 유형 대신 반환됩니다.

  • sum() 함수는 모든 정수를 xs:decimal에 매핑합니다.

  • xs:duration 형식의 값에 대한 sum() 함수는 지원되지 않습니다.

  • 기본 형식 경계 간에 형식을 혼합하는 시퀀스는 지원되지 않습니다.

  • sum((xs:double("INF"), xs:double("-INF"))은 도메인 오류를 발생합니다.

참고 항목

xml 데이터 형식에 대한 XQuery 함수