Название: Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML (Токмаков Г. П.)

Жанр: Информационные системы и технологии

Просмотров: 1402


4.2. агрегатные функции

 

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

– Какова общая сумма плановых продаж для всех служащих?

– Каковы наибольший и наименьший объемы продаж?

– Сколько служащих перевыполнили план?

– Какова средняя стоимость заказа?

– Какова средняя стоимость заказа в каждом офисе?

– Сколько служащих закреплено за каждым офисом?

В SQL запросы такого типа можно создавать с помощью агрегатных функций.

Агрегатные функции используются подобно именам  полей  в  операторе

SELECT, но с одним исключением: они берут имя поля как аргумент. С функ-

циями SUM и AVG могут использоваться только числовые поля.

К агрегатным относятся следующие функции:

Функция         Результат        . AVG....Среднеарифметическое значение выбранных значений данного поля

SUM....Сумма всех выбранных значений данного поля

MIN....Наименьшее из всех выбранных значений данного поля

MAX....Наибольшее из всех выбранных значений данного поля

COUNT..Количество строк или непустых значений полей, которые выбрал запрос

 

4.2.1.  В ЫЧИС Л Е НИЕ  СР ЕДНЕГО  ЗНАЧЕН ИЯ  СТОЛБЦА

 

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

Пример. Каковы плановый и средний фактический объемы продаж компа-

нии?

 

SELECT AVG(QUOTA), AVG(SALES) FROM SLUZHASCHIE

 

Аргументом агрегатной функции может быть также выражение, как пока-

зано в следующем примере.

Пример. Какой средний процент выполнения плана в компании?

 

SELECT AVG(100 * (SALES/QUOTA)) FROM SLUZHASCHIE

 

После выполнения этого запроса СУБД создает временный столбец, со- держащий значения 100 * (SALES/QUOTA) для каждой строки таблицы SLUZHA‐ SCHIE, а затем вычисляет среднее значение временного столбца.

 

4.2.2.  В ЫЧИС Л Е НИЕ СУ ММЫ ЗНАЧЕНИ Й СТОЛБ Ц А

 

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

Ниже приведен пример, в котором используется функция SUM( ).

Пример. Каковы общий плановый и общий фактический объемы продаж в компании?

 

SELECT SUM(QUOTA), SUM(SALES) FROM SLUZHASCHIE

 

4.2.3.  В ЫЧИС Л Е НИЕ  ЭКСТРЕМУМОВ

 

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

Ниже приведен пример, показывающий использование данных функций.

Пример. Каковы наибольший и наименьший плановые объемы продаж в компании?

 

SELECT MIN(QUOTA), MAX(QUOTA) FROM SLUZHASCHIE

В случае применения функций MIN() и MAX() к числовым данным числа сравниваются по арифметическим правилам (среди двух отрицательных чисел меньше то, у которого модуль больше; нуль меньше любого положительного числа и больше любого отрицательного). Сравнение дат происходит последова- тельно (более ранние значения дат считаются меньшими, чем более поздние). Сравнение интервалов времени выполняется на основании их продолжительности.

В случае применения функций MIN() и MAX() к строковым данным резуль- тат сравнения двух строк зависит от используемой таблицы кодировки. На пер- сональных компьютерах используется таблица кодировки ASCII, где установлен

порядок сортировки, при котором цифры идут перед буквами, а все прописные буквы  перед строчными.

 

4.2.4.  В ЫЧИС Л Е НИЕ  КОЛИЧЕСТВ А  ЗНАЧЕ НИЙ  В  СТ ОЛБЦЕ

 

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

Пример. Подсчитать количество клиентов компании?

 

SELECT COUNT(ID_CLN) FROM CLIENTY

 

4.2.5.  П РАВИЛА ВЫПОЛ НЕНИЯ З АПРОС ОВ , В КОТОРОМ УЧАСТВУЮТ АГРЕГАТ НЫЕ  ФУНКЦИИ

Таблица результатов запроса, в котором участвуют агрегатные функции,

генерируется следующим образом.

1. Берется таблица, указанная в предложении FROM.

2. Если имеется предложение WHERE, применить заданное в нем условие от-

бора к каждой строке таблицы. Если при этом получается значение TRUE, то те-

кущая строка добавляется в результирующую таблицу, если получается значе-

ние FALSE, то строка отбрасывается.

3. Для каждой из оставшихся строк вычислить значение каждого элемента в списке возвращаемых столбцов и создать одну строку таблицы результатов за-

проса.

Смысл запроса, в котором участвуют агрегатные функции, легче понять,

если разбить процесс выполнения на два этапа.

Сначала представим выполнение запроса без агрегатных функций (п.п. 1-5

раздела 4.1.5).

Затем представим, как СУБД применяет агрегатные функции к результатам запроса, формируя при этом итоговую строку.

Все  агрегатные  функции  возвращают  единственное  значение.  Функции

COUNT, MIN и MAX применимы как к числовым полям, так и к нечисловым полям,

тогда как функции SUM и AVG могут применяться только к числовым полям.