Агрегатные функции
При статистическом анализе баз данных необходимо получать такую информацию, как общее количество записей, наибольшее и наименьшее значение заданного поля записи, усредненное значение поля. Это делается с помощью запросов, содержащих так называемые агрегатные функции. Агрегатные функции производят одиночное значение для всей группы таблицы. Имеется список этих функций:
- count извлекает количество записей данного поля;
- sum извлекает арифметическую сумму всех выбранных значений данного поля;
- avg извлекает арифметическое среднее (усреднение) всех выбранных значений данного поля;
- max извлекает наибольшее из всех выбранных значений данного поля;
- min извлекает наименьшее из всех выбранных значений данного поля.
Для определения общего числа записей в таблице Products используем следующий запрос:
select count (*) from Products;
результатом которого будет (рис. 4.14):
Рис. 4.14. Результат запроса с функцией count
Обратите внимание — на вкладке Messages возникает сообщение, что только одна запись извлечена:
(1 row(s) affected)
Это означает, что агрегатные функции возвращают всего одну запись называемую скалярным значением, в отличие от других запросов, возвращающих наборы записей.
Для определения количества записей поля ProductName таблицы Products используем следующий запрос:
select count (ProductName) from Products;
Таблица Products имеет все заполненные значения полей, поэтому результат этого запроса будет совпадать с результатом извлечением всех записей.
Как быть со значениями полей, которые были незаполненными? Обращение к таким полям осуществляет оператор null. Величина null не означает, что в поле стоит число 0 (нуль) или пустая текстовая строка — " ". Как возникают значения полей null? Существует два способа образования таких значений:
- Microsoft SQL Server 2000 автоматически подставляет значение null, если в значение поля не было введено никаких значений и если тип данных для этого поля не препятствует присвоению значения null (если поле не является обязательным для заполнения);
- если пользователь явным образом вводит значение null (подробнее о создании таблиц см. далее).
Вы можете самостоятельно попробовать определить, есть ли в какой-либо таблице базы данных Northwind поля, имеющие значения:
select *( или название столбца(ов)) from название_таблицы where название столбца is null;
Для обратной задачи используем запрос типа
select *( или название столбца(ов)) from название_таблицы where название столбца is not null;
Оператор count учитывает записи со значением поля null.
Синтаксис использования других операторов одинаков — следующие запросы извлекают сумму, арифметическое среднее, наибольшее и наименьшее значения поля UnitPrice таблицы Products:
select sum(UnitPrice) from Products; select avg(UnitPrice) from Products; select max(UnitPrice) from Products; select min(UnitPrice) from Products;
Выполните самостоятельно эти запросы и просмотрите результаты.