Поделиться через


Агрегатные функции — 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 не поддерживается.

  • не поддерживаются последовательности, в которых смешиваются типы на основе разных базовых типов;

  • Синтаксический параметр для указания параметров сортировки не поддерживается.

См. также

Функции XQuery для типа данных XML