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



         

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


  • SELECT COUNT(*)
  • FROM R1
  • WHERE Оценка > 2:
  • Это, конечно, отличается от выбора поля, поскольку всегда возвращается одиночное значение, независимо от того, сколько строк находится в таблице. Аргументом агрегатных функций могут быть отдельные столбцы таблиц. Но для

    83

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

  • SELECT R1.Дисциплина, COUNT(DISTINCT R1.Оценка)
  • FROM R1
  • WHERE R1.Оценка IS NOT NULL
  • GROUP BY R1.Дисциплина
  • Результат:

    Дисциплина COUNT(DISTINCT R1 .Оценка)
    Базы данных 3
    Теория информации 3
    Сети и телекоммуникации 2
    Английский язык 3

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

  • SELECT R2.Группа. R1.Дисциплина. COUNT(*). АVР(Оценка)
  • FROM R1.R2
  • WHERE R1.ФИО = R2.ФИО AND
  • R1.Оценка IS NOT NULL AND
  • R1.Оценка > 2
  • GROUP BY R2.Группа. R1.Дисциплина
  • Результат:

    Дисциплина COUNT(*) АVRОценка)
    Базы данных 6 3.83
    Теория информации 3 3.67
    Сети и телекоммуникации 3 4.66
    Английский язык 4 4.25

    Мы не можем использовать агрегатные функции в предложении WHERE, потому что предикаты оцениваются в терминах одиночной строки, а агрегатные функции - в терминах групп строк.

    84

    Предложение GROUP BY позволяет определять подмножество значений в особом поле в терминах другого поля и применять функцию агрегата к подмножеству. Это дает возможность объединять поля и агрегатные функции в едином предложении SELECT. Агрегатные функции могут применяться как в выражении вывода результатов строки SELECT, так и в выражении условия обработки сформированных групп HAVING.


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