Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции2011.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.86 Mб
Скачать

2. Статистические функции

Функции агрегации группируют значения столбца таблицы и возвращают значение вычисленной функции. Ниже приведены такие функции:

  1. COUNT – функция подсчета количества строк или значений столбца, выбранного запросом, что не являются пустыми. Функция имеет следующий синтаксис:

COUNT [DISTINCT|ALL](<выражение>).

При выполнении подсчетов разных значений в столбцах необходимо использовать ключевое слово DISTINCT.

Особенный вариант использования функции COUNT (*) возвращает количество строк в таблице, в том числе дубликаты и атрибуты с неопределенными значениями.

2. SUM - функция подсчета арифметической суммы значений выбранного столбца. Функция имеет следующий синтаксис:

SUM [DISTINCT|ALL](<выражение>).

  1. AVG – функция вычисления среднего значения в выбранном столбце.

Синтаксис функции: AVG [DISTINCT|ALL](<выражение>).

4. MAX – функция выбора самого большого значения со всех значений столбца таблицы. Синтаксис функции: MAX [DISTINCT|ALL](<выражение>).

Допускаются аргументы типа числовой, символьный и дата.

5. MIN – функция выбора самого меньшего значения со всех значений столбца таблицы. Синтаксис функции: MIN [DISTINCT|ALL](<выражение>).

При выполнении вычислений для групповых операций по умолчанию используется ключевое слово ALL, которое указывает, что результат включает все значения атрибута, в том числе дублирующие. Если в запросе использовано ключевое слово DISTINCT, то групповые функции рассматривают только отличные друг от друга значения атрибутов или выражений. Все групповые операции, кроме COUNT (*), не учитывают в вычислениях атрибуты, которые имеют неопределенное значение (NULL).

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

SELECT MIN(PRICE), MAX(PRICE), AVG(PRICE), SUM(PRICE) FROM ORDERS.

Для подсчета общего количества строк в таблице заказов необходимо выполнить команду:

SELECT COUNT(*) FROM ORDERS.

Для вычисления количества поставщиков, которым оформлялись заказы, необходимо выполнить команду: SELECT COUNT(DISTINCT S_ID) FROM ORDERS.

Выбор суммарной стоимости товаров по всем заказам со скидкой на 30% выполнится следующей командой: SELECT SUM(PRICE*0.7) FROM ORDERS.

3. Группировка и агрегатные функции в запросах

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

Синтаксис команды группировки строк:

GROUP BY <выражение> [, <выражение>]…[HAVING <условие>].

Выражение может:

  1. быть именем столбца, выражением, константой или функцией без параметров (например, DATE());

  2. содержать функцию группировки типа SUM, AVG и др.

Слова GROUP BY могут ссылаться на любой столбец с выражения FROM независимо от того, упоминаются они или нет в списке отбора SELECT.

Ключевое слово HAVING используется для уточнения, какие группы с GROUP BY будут включаться в конечный результат. Предложения, которые содержат ключевые слова GROUP BY и HAVING, обрабатываются следующим образом:

  1. из запроса удаляются все строки, что не удовлетворяют условию WHERE;

  2. вычисляются и формируются группы соответственно к словам GROUP BY;

  3. удаляются все группы, которые не соответствуют условию HAVING.

Если присутствуют оба ключевых слова GROUP BY и HAVING, они могут задаваться в любом порядке.

Ниже приведены способы использования ключевых слов GROUP BY и HAVING.

Выбор среднего количества товаров, заказанных каждому поставщику, выполняется командой: SELECT S_ID, AVG(QN_TY) FROM ORDERS GROUP BY S_ID.

Выбор среднего количества товаров, заказанных каждому поставщику, при условии, что средний размер партии в каждого поставщика меньше 330-ти единиц товара, выполнится командой: SELECT S_ID, AVG(QN_TY) FROM ORDERS GROUP BY S_ID

HAVING AVG(QN_TY) < 330

Условие, заданное ключевым словом HAVING, относится к сформированной условием GROUP BY группе, а не к конкретным значениям атрибута.

Если условие отбора относится не к группе, а к атрибутам, то она должна быть указана после ключевого слова WHERE. Ниже приведен соответствующий пример.

Выбор среднего количества товаров, заказанных каждому поставщику, при условии, что размер партии каждого заказа не более 500-от единиц, выполнится командой:

SELECT S_ID, AVG(QN_TY) FROM ORDERS WHERE QN_TY 500 GROUP BY S_ID

Формирование результатов запросов

Для выполнения сортирование результатов запроса по увеличению или по убыванию используются ключевые слова ORDER BY.

Сортировка задается следующей синтаксической конструкцией:

ORDER BY <выражение> | <положение> [ASC|DESC].

Параметр <выражение> базируется на одном или нескольких столбцах, перечисленных после ключевого слова SELECT через запятую. Строки с одинаковым значением по первому столбцу упорядочиваются по второму столбцу (если он определен) и т.д.

Параметр <положение> задает число, которое идентифицирует позицию столбца в перечне после ключевого слова SELECT, т.е. вместо указания имени столбца можно указать номер позиции столбца в перечне SELECT. Сортировка при помощи позиции полезна для длинных выражений.

Слова ASCENDING (ASC) и DESCENDING (DSC) означают увеличение или убывание, в значении кодов ASCI порядок сортирования ASCENDING действует по умолчанию.

Например, вывод данных о заказах по увеличению даты заказа выполнится командой:

SELECT * FROM ORDERS ORDER BY DAT.

Вывод данных о заказах по увеличению единицы товара, а в границах одинаковой цены – по увеличению количества товаров выполнится командой:

SELECT * FROM ORDERS ORDER BY PRICE, QN_TY.

Вывод данных о среднем рейтинге поставщиков, сгруппированных по местам, в алфавитном порядке с названием мест выполнится командой:

SELECT S_CITY, AVG(S_RATING) FROM SUPPL GROUP BY S_CITY ORDER BY S_CITY

Для отформатированного вывода данных используются скалярные выражения с

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]