Суммирование данных с помощью функций агрегирования.
Запросы могут обобщать не только группы значений, но и значения одного поля. Для этого применяются агрегатные функции. Они дают единственное значение для целой группы строк таблицы. Ниже приводится список этих функций:
• 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!