Системы обработки информации - язык баз данных SQL

<Спецификация функции над множеством> (<set function specification>)


Функция

Специфицирует значение, получаемое применением функции к аргументу.

Формат

<set function specification> ::=

COUNT(*) | <distinct set function>

| <all set function>

<distinct set function> ::=

{ AVG | MAX | MIN | SUM | COUNT }

(DISTNICT <column specification>)

<all set function> ::=

{ AVG | MAX | MIN | SUM }

([ALL] <value expression>)

Синтаксические правила



  • Аргумент COUNT(*) и источник аргумента <функции над различными элементами множества> (<distinct set function>) и <функции надо всеми элементами множества> (<all set function>) - это таблица или группа сгруппированной таблицы в соответствии со спецификациями в , "<Выражение, вырабатывающее таблицу> (<table expression>)", , "<Подзапрос> (<subquery>)" и , "<Спецификация запроса> (<query specification>)".
  • Пусть R обозначает аргумент или источник аргумента <спецификации функции над множеством> (<set function specification>).
  • <Спецификация столбца> (<column specification>) <функции над различными элементами множества> (<distinct function specification>) и каждая <спецификация столбца> (<column specification>) в <выражении, вырабатывающем значение> (<value expression>) <функции надо всеми элементами множества> (<all set function>) должны недвусмысленно ссылаться на столбец R и не должны ссылаться на столбец, порожденный из <спецификации функции над множеством> (<set function specification>).
  • <Выражение, вырабатывающее значение> (<value expression>) <функции надо всеми элементами множества> должно включать <спецификацию столбца> (<column specification>), которая ссылается на столбец R, и не должно включать <спецификацию функции над множеством> (<set function specification>). Если <спецификация столбца> (<column specification>) является внешней ссылкой, то <выражение, вырабатывающее значение> (<value expression>) не должно включать никаких операторов.
    Замечание: "Внешняя ссылка" определяется в , "<Спецификация столбца> (<column specifiction">).

  • Если <спецификация функции над множеством> (<set function specification>) содержит <спецификацию столбца> (<column specificaton>), являющуюся внешней ссылкой, то <спецификации функции над множеством> (<set function specification>) должна содержаться в <подзапросе> (<subquery>) <статьи having> (<having clause>).

    Замечание: "Внешняя ссылка" определяется в 5.7, "<Спецификация столбца> (<column specifiction">).


  • Пусть T тип данных значений, являющихся результатами вычисления <спецификации столбца> (<column specification>) или <выражения, вырабатывающего значение> (<value expression>).


  • Если указывается COUNT, то тип данных результата <спецификации функции над множеством> (<set function specification>) - это тип точных чисел с определенной в реализации точностью и масштабом 0.


  • Если указывается MAX или MIN, то тип данных результата есть T.


  • Если указывается SUM или AVG, то:

    a) тип T не должен быть типом символьных строк.

    b) если указывается SUM и T - тип точных чисел с масштабом S, то тип данных результата - тип точных чисел с определенной в реализации точностью и масштабом S.

    c) если указывается AVG и T - тип точных чисел с масштабом S, то тип данных результата - тип точных чисел с определенными в реализации точностью и масштабом.

    d) если T - тип приблизительных чисел, то тип результата - тип приблизительных чисел с определенной в реализации точностью.


  • Общие правила

  • Аргументом <функции над различными элементами множества> (<distinct set function>) является множество значений. Это множество получается путем удаления неопределенных значений и всех избыточных дублирующих значений из столбца R, на который ссылается <спецификация столбца> (<column specification>).


  • Аргументом <функции надо всеми элементами множества> (<all set function>) является мультимножество значений. Это мультимножество получается путем удаления всех неопределенных значений из результата применения <выражения, вырабатывающего значение> (<value expression>) к каждой строке R. Указание или неуказание ALL не влияет на смысл <функции надо всеми элементами множества> (<all set function>).




  • Пусть S обозначает аргумент <функции над различными элементами множества> (<distinct set function>) или <функции надо всеми элементами множества> (<all set function>).


  • Тогда:

    a) Если задается <функция над различными элементами множества> (<distinct set function>) COUNT, то результатом является мощность S.

    b) Если задается функция COUNT(*), то результатом является мощность R.

    c) Если задается функция AVG, MAX, MIN или SUM и S пусто, то результатом является неопределенное значение.

    d) Если задается MAX или MIN, то результатом является, соответственно, максимальное или минимальное значение в S. Эти результаты определяются с использованием правил сравнения, определенных в , "<comparison predicate>".

    e) Если задается SUM, то результатом является суммазначений в S. Сумма должна быть в пределах диапазона значений типа данных результата.

    f) Если задается AVG, то результатом является среднеезначение значений в S. Сумма значений в S должнабыть в пределах диапазона значений типа данных результата.



  • Содержание раздела