Condividi tramite


Funzioni di aggregazione - min

Si applica a:SQL Server

Restituisce da una sequenza di valori atomici, $arg, l'elemento il cui valore è minore di quello di tutte le altre.

Sintassi

  
fn:min($arg as xdt:anyAtomicType*) as xdt:anyAtomicType?  

Argomenti

$arg
Sequenza di elementi da cui viene restituito il valore minimo.

Osservazioni:

Tutti i tipi dei valori atomizzati passati a min() devono essere sottotipi dello stesso tipo di base. I tipi di base accettati sono i tipi che supportano l'operazione gt . Tra questi tipi sono inclusi i tre tipi di base numerici predefiniti, ovvero i tipi di base di data/ora xs:string, xs:boolean e xdt:untypedAtomic. Per i valori di tipo xdt:untypedAtomic viene eseguito il cast a xs:double. In presenza di una combinazione di questi tipi o nel caso in cui vengano passati altri valori di altri tipi, viene restituito un errore statico.

Il risultato di min() riceve il tipo di base dei tipi passati, ad esempio xs:double nel caso di xdt:untypedAtomic. Se l'input è una sequenza vuota calcolata in modo statico, la sequenza vuota è implicita e viene restituito un errore statico.

La funzione min() restituisce il valore della sequenza minore di qualsiasi altro nella sequenza di input. Per i valori xs:string, vengono utilizzate le regole di confronto predefinite dei punti di codice Unicode. Se non è possibile eseguire il cast di un valore xdt:untypedAtomic a xs:double, il valore viene ignorato nella sequenza di input $arg. Se l'input è una sequenza vuota calcolata in modo dinamico, viene restituita la sequenza vuota.

Esempi

In questo argomento vengono forniti esempi di XQuery su istanze XML archiviate in varie colonne di tipo xml nel database AdventureWorks.

R. Utilizzo della funzione XQuery min() per l'individuazione del centro di lavorazione con il numero minimo di ore di manodopera

La query seguente recupera tutti i centri di lavorazione con il numero minimo di ore di manodopera inclusi nel processo di produzione del modello del prodotto (ProductModelID=7). In genere, come illustrato nell'esempio seguente, viene restituito un singolo centro. Nel caso in cui esistano più centri con lo stesso numero minimo di ore di manodopera, vengono restituiti tutti questi centri.

select ProductModelID, Name, Instructions.query('  
  declare namespace AWMI=  
    "https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
  for   $Location in /AWMI:root/AWMI:Location  
  where $Location/@LaborHours =  
          min( /AWMI:root/AWMI:Location/@LaborHours )  
return  
  <Location WCID=     "{ $Location/@LocationID }"   
              LaborHrs= "{ $Location/@LaborHours }" />  
  ') as Result   
FROM  Production.ProductModel  
WHERE ProductModelID=7  

Dalla query precedente si noti quanto segue:

  • La parola chiave namespace nel prologo XQuery definisce un prefisso dello spazio dei nomi. In seguito, tale prefisso viene utilizzato nel corpo della query XQuery.

Il corpo XQuery costruisce il codice XML con un <elemento Location> con attributi WCID e LaborHrs .

  • La query recupera inoltre i valori del modello del prodotto ProductModelID e dei nomi.

Risultato:

ProductModelID   Name              Result  
---------------  ----------------  ---------------------------------  
7                HL Touring Frame  <Location WCID="45" LaborHrs="0.5"/>   

Limitazioni di implementazione

Limitazioni:

  • La funzione min() esegue il mapping di tutti i numeri interi a xs:decimal.

  • La funzione min() sui valori di tipo xs:duration non è supportata.

  • Non sono supportate le sequenze con combinazioni di tipi che non rispettano i limiti del tipo di base.

  • Non è supportata l'opzione sintattica che fornisce le regole di confronto.

Vedi anche

Funzioni XQuery per il tipo di dati XML