Введение в модель данных SQL

Семантика агрегатных функций


Агрегатные функции (в стандарте SQL они называются функциями над множествами)1) определяются следующими синтаксическими правилами:

<set_function_specification> ::= COUNT(*) | set_function_type ([DISTINCT | ALL ] value_expression) | GROUPING (column_reference) <set_function_type> ::= { AVG | MAX | MIN | SUM | EVERY | ANY | SOME | COUNT }

Как видно из этих правил, в стандарте SQL:1999 определены пять стандартных агрегатных функций: COUNT - число строк или значений, MAX - максимальное значение, MIN - минимальное значение, SUM - суммарное значение и AVG - среднее значение, а также две "кванторные" функции EVERY и SOME (ANY). В последних двух случаях выражение должно иметь булевский тип. Обсуждение функции GROUPING мы отложим до следующей лекции.

Агрегатные функции предназначены для того, чтобы вычислять некоторое значение для заданного мультимножества строк. Таким мультимножеством строк может быть группа строк, если агрегатная функция применяется к сгруппированной таблице, или (в вырожденных случаях) вся таблица. Для всех агрегатных функций, кроме COUNT(*), фактический (т. е. требуемый семантикой) порядок вычислений состоит в следующем. На основании параметров агрегатной функции из заданного мультимножества строк производится список значений. Затем по этому списку значений производится вычисление функции. Если список оказался пустым, то значением функции COUNT для него является 0, значением функции SOME - false, значением функции ALL - true, а значением всех остальных функций - NULL.

Пусть T обозначает тип значений из этого списка (вернее, "наименьший общий" тип, см. раздел "Скалярные выражения" лекции 13). Типы значений агрегатных функций определяются следующими правилами.

  • Результат вычисления функции COUNT - это точное число с точностью и шкалой, которые определяются в реализации.
  • Тип результата значений функций MAX и MIN совпадает с T. При вычислении функций SUM и AVG тип T не должен быть типом символьных строк.
  • Если T представляет собой тип точных чисел, то и типом результата функции является тип точных чисел с определяемыми в реализации точностью и шкалой.
  • Если T представляет собой тип приблизительных чисел, то и типом результата функции является тип приблизительных чисел с определяемыми в реализации точностью.



Содержание  Назад  Вперед