Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных.doc
Скачиваний:
114
Добавлен:
16.03.2016
Размер:
5.67 Mб
Скачать

19.2.2. Результаты запросов и агрегатные функции

Об использовании агрегатных функций в разделах HAVINGиSELECTоператора выборки упоминалось в подразделе17.2.1. «Общие синтаксические правила построения скалярных выражений»лекции 17. В данном подразделе уместно повторить и уточнить этот материал.

Агрегатные функции можно разумным образом использовать в списке выборки (при построении выражений, являющихся элементами выборки) и в логическом выражении раздела HAVING(вернее, в выражениях, входящих в простые условия). Рассмотрим разные случаи применения агрегатных функций в списке выборки в зависимости от вида табличного выражения.

Если результат табличного выражения Rне является сгруппированной таблицей (т. е. в табличном выражении отсутствуют разделыGROUP BYиHAVING), то появление в списке выборки хотя бы одного вызова агрегатной функции от (мульти) множества строкRприводит к тому, чтоRнеявно рассматривается как сгруппированная таблица, состоящая из одной (или нуля, еслиRпусто) групп с отсутствующими столбцами группирования. Поэтому в данном случае в выражениях списка выборки не допускается прямое использование имен столбцовR:все они должны находиться внутри спецификаций вызова агрегатных функций. Результатом запроса является таблица, состоящая не более чем из одной строки, значения столбцов которой получены путем применения агрегатных функций кR.

Аналогично обстоит дело в том случае, когда Rпредставляет собой сгруппированную таблицу, но табличное выражение не содержит разделаGROUP BY(и, следовательно, содержит разделHAVING). В этом случае считается, что результат табличного выражения явно объявлен сгруппированной таблицей, состоящей из одной группы, и результат запроса можно формировать только путем применения агрегатных функций к данной группе строк. Опять результатом запроса является таблица, состоящая не более чем из одной строки, значения столбцов которой получены путем применения агрегатных функций кR.

Наконец, рассмотрим случай, когда Rпредставляет собой «настоящую» сгруппированную таблицу, т. е. табличное выражение содержит разделGROUP BY, и, следовательно, определен по крайней мере один столбец группирования (т. е. имеется хотя бы один такой столбец, что для любой группы его значения одинаковы во всех строках группы). В этом случае правила формирования списка выборки полностью соответствуют правилам формирования условия выборки разделаHAVING. Другими словами, в выражениях, являющихся элементами списка выборки, допускается прямое использование имен столбцов группирования, а спецификации остальных столбцовRмогут появляться только внутри спецификаций агрегатных функций. Результатом запроса является таблица, число строк в которой равно числу групп вR. Значения столбцов каждой строки формируются на основе значений столбцов группирования и вызовов агрегатных функций для соответствующей группы.

19.2.3. Логические выражения раздела having

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