Базы данных - модели, разработка, реализация



         

Применение агрегатных функций и вложенных запросов в операторе выбора - часть 4


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

Построим запрос, который выводит группы, в которых по одной дисциплине на экзаменах получено больше одной двойки:

  • SELECT R2.Группа
  • FROM R1.R2
  • WHERE Rl-ФИО = R2.ФИО AND
  • R1.Оценка = 2
  • GROUP BY R2.Группа . Rl.Дисциплина
  • HAVING count(*)> 1
  • В дальнейшем в качестве примера будем работать не с БД "Сессия", а с БД "Банк", состоящей из одной таблицы F, в которой хранится отношение F, содержащее информацию о счетах в филиалах некоторого банка:

  • F = (N, ФИО, Филиал, Дата Открытия, Дата Закрытия, Остаток);
  • Q = (Филиал, Город);
  • поскольку на этой базе можно ярче проиллюстрировать работу с агрегатными функциями и группировкой.

    Например, предположим, что мы хотим найти суммарный остаток на счетах в филиалах. Можно сделать раздельный запрос для каждого из них, выбрав SUM(Остаток) из таблицы для каждого филиала. GROUP BY, однако, позволит поместить их все в одну команду:

  • SELECT Филиал, SUM(Остаток)
  • FROM F
  • GROUP BY Филиал:
  • GROUP BY применяет агрегатные функции независимо для каждой группы, определяемой с помощью значения поля Филиал. Группа состоит из строк с одинаковым значением поля Филиал, и функция dSUM применяется отдельно для каждой такой группы, то есть суммарный остаток на счетах подсчитывается отдельно для каждого филиала. Значение поля, к которому применяется GROUP BY, имеет, по определению, только одно значение на группу вывода, как и результат работы агрегатной функции. Поэтому мы можем совместить в одном запросе агрегат и поле. Вы можете также использовать GROUP BY с несколькими полями.

    Предположим, что мы хотели бы увидеть только те суммарные значения остатков на счетах, которые превышают $5000. Чтобы увидеть суммарные остатки

    85

    свыше $5000, необходимо использовать предложение HAVING. Предложение HAVING определяет критерии, используемые, чтобы удалять определенные группы из вывода, точно так же как предложение WHERE делает это для индивидуальных строк.




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