Агрегатные функции — min
Область применения: SQL Server
Возвращает из последовательности атомарных значений, $arg, один элемент, значение которого меньше, чем все остальные.
Синтаксис
fn:min($arg as xdt:anyAtomicType*) as xdt:anyAtomicType?
Аргументы
$arg
Последовательность элементов, из которой необходимо вернуть минимальное значение.
Замечания
Все типы атомизованных значений, передаваемых в min(), должны быть подтипами одного базового типа. Допустимые базовые типы — это типы, поддерживающие операцию gt . Эти типы включают в себя три встроенных базовых численных типа, базовые типы даты-времени, а также xs:string, xs:boolean, xdt:untypedAtomic. Значения типа xdt:untypedAtomic приводятся к типу xs:double. Если имеется смесь этих типов или передаются значения других типов, возникает статическая ошибка.
Результат min() получает базовый тип переданных типов, например xs:double в случае xdt:untypedAtomic. Если вход статически пуст, подразумевается пустое значение и возвращается статическая ошибка.
Функция min() возвращает одно значение в последовательности, которая меньше, чем любая другая в входной последовательности. Для значений xs:string используются параметры сортировки кодовых точек Юникода по умолчанию. Если значение xdt:untypedAtomic не может быть приведение к xs:double, значение игнорируется в входной последовательности, $arg. Если вход — это динамически вычисляемая пустая последовательность, возвращается пустая последовательность.
Примеры
В этом разделе приведены примеры XQuery для экземпляров XML, хранящихся в различных столбцах типа XML в базе данных AdventureWorks.
А. Использование функции min() языка XQuery для поиска расположения цеха с наименьшим количеством рабочих часов
Следующий запрос в процессе производства модели продукта (ProductModelID=7) получает все расположения цехов с наименьшим количеством рабочих часов. Обычно возвращается одно расположение, как показано далее. Если несколько расположений имеют одинаковое количество рабочих часов, возвращаются все.
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
Обратите внимание на следующие данные из предыдущего запроса:
- Ключевое слово пространства имен в прологе XQuery определяет префикс пространства имен. Данный префикс затем используется в теле XQuery.
Текст XQuery создает XML-файл с элементом <Location> с атрибутами WCID и WorkHrs .
- Запрос также получает номер ProductModelID и значения имени.
Результат:
ProductModelID Name Result
--------------- ---------------- ---------------------------------
7 HL Touring Frame <Location WCID="45" LaborHrs="0.5"/>
Ограничения реализации
Существуют следующие ограничения:
Функция min() сопоставляет все целые числа с xs:decimal.
Функция min() для значений типа xs:duration не поддерживается.
не поддерживаются последовательности, в которых смешиваются типы на основе разных базовых типов;
Синтаксический параметр для указания параметров сортировки не поддерживается.