Суммирование данных с помощью функций агрегирования.



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

COUNT определяет количество строк или значений поля, выбранных посред­ством запроса и не являющихся NULL-значениями;

SUM вычисляет арифметическую сумму всех выбранных значений данного поля;

AVG вычисляет среднее значение для всех выбранных значений данного поля;

МАХ вычисляет наибольшее из всех выбранных значений данного поля;

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

Функции агрегирования используются как имена полей в предложении запроса SELECT с одним исключением: имена полей применяются как аргументы. Для SUM и AVG могут использоваться только цифровые поля. Для COUNT, MAX и MIN — цифровые и символьные поля. При употреблении с символьными полями МАХ и MIN применяются к ASCII-эквивалентам: MIN предполагает минимальное (пер­вое), а МАХ — максимальное (последнее) значения в соответствии с алфавитным порядком.

Чтобы найти сумму (SUM) всех заявок из таблицы Orders, можно ввести следующий запрос:

SELECT SUM(amt)

FROM Orders;

 

Специальные атрибуты в COUNT

Функция COUNT отличается от предыдущих тем, что подсчитывает

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

SELECT COUNT (DISTINCT snum)

 FROM Orders;

В данном примере DISTINCT вместе со следующим за ним именем поля, к которому он применяется, заключен в круглые скобки и не следует непосредственно за SELECT, как это было ранее. Такая форма применения DISTINCT с COUNT к отдельным столбцам предписывается стандартом ANSI, но многие программы не придерживается этого требования. Указанным способом DISTINCT можно применять с любой функцией агрегирования, но чаще всего он используется с COUNT. Применение его с МAX и MIN бесполезно; а используя SUM и AVG, необходимо включение в выходные данные повторяющихся значений, так как они влияют на сумму и средне значений всех столбцов.

Использование COUNT со строками.Для подсчета общего количества строк в таблице следует использовать функцию COUNT со звездочкой вместо имени поля так, как показано в следующем примере.

SELECT COUNT (*)

 FROM Customers;

Использование дубликатов в агрегатных функциях. Агрегатные функции могут также (во многих реализациях) иметь аргумент ALL, который размещается перед именем поля, как и DISTINCT, но обозначает противоположное: включить дубликаты. Требования ANSI не допускают подобного для COUNT, но многие реализации игнорируют это ограничение. Различие между ALL и * при использовании COUNT заключается в следующем:

¨ ALL использует имя поля в качестве аргумента;

¨ ALL не подсчитывает NULL-значения.

Поскольку * является единственным аргументом, который включает NULL-значения и используется только с COUNT, функции, отличные отCOUNT,игнорируют NULL-значения в любом случае. Следующая команда осуществляет подсчет количества значений поля rating, отличных от NULL-значений, в таб­лице Customers (включая повторения):

SELECT COUNT (ALL rating)

 FROM Customers;

Агрегаты, построенные на скалярных выражениях.

До сих пор были использованы агрегатные функции с одним полем в качестве аргумента. Можно использовать агрегатные функции с аргументами, которые состоят из скалярных выражений, включающих одно поле или большее количе­ство полей. (При этом не разрешается применять DISTINCT.) Предположим, таблица Orders содержит дополнительный столбец с величиной предыдущего баланса (blnc) для каждого покупателя. Можно найти текущий баланс, добавив значение поля amount (amt) к значению поля blnc. Можно найти наибольшее значение текущего баланса:

SELECT MAX (blnc + amt)

 FROM Orders;

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

 

 

Задание

В СУБД FoxPro создать базу данных, содержащую несколько связанных по ключевым полям таблиц. Тематика базы данных определяется самостоятельно студентом. На примере созданной базы данных реализовать следующие механизмы языка структурированных запросов:

1. Минимальный набор обязательных элементов оператора SELECT.

2. Использование ключевого слова DISTINCT.

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

только реляционных операторов сравнения;

булевых операторов сравнения;

ключевого слова IN;

ключевого слова BETWEEN;

ключевого слова LIKE;

функций агрегирования:

функция COUNT;

функция SUM;

функция AVG;

функция MIN;

функция MAX.

 

Содержание отчета

1. Название лабораторной работы.

2. Цель работы.

3. Структура БД, сформированной в СУБД.

4. Протокол работы оператора SELECT (с использованием всех механизмов, описанных ниже).

5. Вывод.

Контрольные вопросы

1. Комбинирование булевых и реляционных операторов для определения условий выборки данных;

2. Механизм устранения избыточности данных;

3. Использование шаблонов для выборки данных;

4. Особенности применения функций агрегирования;

 

 

Лабораторные работы №3,4

Построение запросов

 

Цель работы: получить практические навыки при построении запросов, формировании выходных данных, включая в запросы операции соединения таблиц, вложенные и связанные запросы, группировку выходных данных таблиц БД в среде СУБД Visual FoxPro.

 

Пояснения к работе


Дата добавления: 2018-05-13; просмотров: 773; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!