Fonctions d’agrégation : min
S’applique à :SQL Server
Retourne à partir d’une séquence de valeurs atomiques, $arg, l’élément dont la valeur est inférieure à celle de tous les autres.
Syntaxe
fn:min($arg as xdt:anyAtomicType*) as xdt:anyAtomicType?
Arguments
$arg
Séquence d'éléments à partir de laquelle la valeur minimale est renvoyée.
Remarques
Tous les types de valeurs atomisées passées à min() doivent être des sous-types du même type de base. Les types de base acceptés sont les types qui prennent en charge l’opération gt . Ces types incluent les trois types numériques de base intégrés, les types de base date/heure et les types xs:string (chaîne), xs:boolean (booléen) et xdt:untypedAtomic (atomique non typé). Les valeurs de type xdt:untypedAtomic sont converties en xs:double. S’il existe un mélange de ces types ou si d’autres valeurs d’autres types sont transmises, une erreur statique est générée.
Le résultat de min() reçoit le type de base du transmis dans les types, tels que xs:double dans le cas de xdt:untypedAtomic. Si l'entrée est statiquement vide, vide est implicite et une erreur statique est générée.
La fonction min() retourne la valeur de la séquence qui est plus petite que toute autre valeur de la séquence d’entrée. Pour les valeurs xs:string, le classement par défaut des points de code Unicode est utilisé. Si une valeur xdt:untypedAtomic ne peut pas être castée en xs:double, la valeur est ignorée dans la séquence d’entrée, $arg. Si l'entrée est une séquence vide calculée de manière dynamique, la séquence vide est renvoyée.
Exemples
Cette rubrique fournit des exemples XQuery par rapport aux instances XML stockées dans différentes colonnes de type XML dans la base de données AdventureWorks.
R. Utilisation de la fonction XQuery min() pour rechercher le poste de travail enregistrant le moins d'heures de main-d'œuvre
La requête suivante récupère tous les postes de travail du processus de fabrication du modèle de produit (ProductModelID=7) qui enregistre le moins d'heures de main-d'œuvre. Généralement, comme le montre l'exemple suivant, un seul poste est renvoyé. Si plusieurs postes de travail enregistraient le même nombre minimal de main-d'œuvre, ils seraient tous renvoyés.
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
Notez les points suivants dans la requête précédente :
- Le mot clé d’espace de noms dans le prolog XQuery définit un préfixe d’espace de noms. Ce préfixe est utilisé ultérieurement dans le corps de la requête.
Le corps XQuery construit le code XML qui a un <élément Location> avec des attributs WCID et LaborHrs .
- La requête récupère également l'identificateur et le nom du modèle de produit.
Voici le résultat obtenu :
ProductModelID Name Result
--------------- ---------------- ---------------------------------
7 HL Touring Frame <Location WCID="45" LaborHrs="0.5"/>
Limites de mise en œuvre
Les limitations suivantes s'appliquent :
La fonction min() mappe tous les entiers à xs:decimal.
La fonction min() sur les valeurs de type xs:duration n’est pas prise en charge.
Les séquences faisant intervenir plusieurs types dérivés de différents types de base ne sont pas prises en charge.
L'option syntaxique fournissant un classement n'est pas prise en charge.