Главная страница
Содержание
 
 

Оператор SELECT – группировка, использование функций СУБД и агрегатных функций

 В отношении выбираемых оператором SELECT кортежей язык SQL позволяет применять группировку.

 В разделе GROUP BY задается список полей группировки. GROUP BY группирует записи данных и объединяет в одну запись все записи данных, которые содержат идентичные значения в указанном поле (или полях). WHERE определяет, какие записи должны участвовать в группировании, т.е. фильтрует до группирования.

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

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

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

Таблица 1 – Агрегатные функции SQL

ФункцияРезультат
COUNTКоличество строк или непустых значений полей, которые выбрал запрос
SUMСумма всех выбранных значений данного поля
AVGСреднеарифметическое значение всех выбранных значений данного поля
MINНаименьшее из всех выбранных значений данного поля
MAXНаибольшее из всех выбранных значений данного поля

После применения агрегатной функции принято давать имя возвращаемому значению. Для этого применяется оператор AS – задание псевдонима. Рассмотрим применение группировки и агрегатных функций на примере.

Пример 4.

Надо: Вывести количество оценок студентов (отношение R3 и R5 из примера 2) по группам для дисциплины «Моделирование». Выводить только те группы, где количество оценок больше 1.

Решение:SELECT COUNT(*) AS count_mark, r5.Группа FROM r3,r5 WHERE r3.Дисциплина = r5.Дисциплина AND r3.Дисциплина = “Моделирование”GROUP BY r5.ГруппаHAVING COUNT(*) > 1;

Кроме агрегатных функций допустимо включать в текст запроса SQL и функции, определенные в самой СУБД. В табл.2 приведены несколько функций допустимых к применению в среде MS Access 2003, однако в каждой СУБД существует свой набор таких функций, о которых можно узнать из страниц документации конкретного программного средства.

Таблица 2 – Встроенные функции СУБД MS Access

ФункцияРезультат
Ucase(выражение)переводит значения поля «выражение» в верхний регистр;
Mid(строка, начало_поиска[, длина])возвращает строку из поля «строка», начиная с позиции «начало_поиска» длинной – «длина». Если длина не указана, то до конца строки.
Round(выражение [,количество_десятичных _знаков])округляет «выражение» с точностью «количество_десятичных_знаков». Если второй аргумент не указан, то округляет до целого.
IIF(выражение, truepart, falsepart)возвращает одно из значений: truepart, если выражение истинно и falsepart – если ложно