Запрос с группировкой

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

Для решения поставленной задачи добавьте в новый запрос таблицы Заказано, Заказы и Клиенты. Конструктор запросов автоматически проставит постоянные связи, существующие между этими таблицами на уровне базы данных. В бланк запроса перенесите поле Название из таблицы Клиенты и поле КодЗаказа из таблицы Заказы. В определения следующих двух полей бланка запросов введите одну и ту же строку: ССиr([Цена]*[Количество]*(1-[Скидка])/100). Последним добавьте поле Дата Размещения из таблицы Заказы . Для того чтобы воспользоваться возможностями группировки, нужно нажать на панели инструментов кнопку Групповые операции ( кнопка с изображением греческой буквы ∑ ). В бланке запроса появится строка с названием Групповая операция, для каждого поля в котором указано значение Группировка. Измените эти значения для второго поля на значение Count, для третьего — на Avg, для четвертого — на Sum, после чего присвойте полям новые имена — Количество заказов, Средняя стоимость и Полная стоимость. Для поля ДатаРазмещения значение группировка необходимо заменить на Условие (после чего конструктор автоматически снимет флажок Вывод на экран) и в строке Условие отбора ввести следующую строку: Between #01.01.98# And #31.12.98#. Последнее, что нужно сделать — указать для поля Полная стоимость порядок сортировки по убыванию. Получившийся запрос представлен на рис. 2.4.

 
 

 
 

 
 

Рис. 2.4. Запрос с группировкой

Пояснения

а). Операция Группировка предназначена для объединения записей, имеющих одинаковые значения в группируемых полях, в одну запись. Для полей, у которых указана статистическая функция (Sum, Count и т.д.), производятся соответствующие вычисления. В нашем примере операция группировка указана для поля Название. Это значит, что из всех записей таблицы Клиенты, удовлетворяющих условию по полю Дата Размещения, в результирующий набор данных войдет только одна запись для каждого клиента. При этом поле Количество заказов будет содержать количество записей, соответствующих конкретному клиенту в таблице Заказы. Например, если для какого-либо из клиентов в течение 1998 года было выписано 12 счетов, то в поле Количество заказов, соответствующих данному клиенту, будет отображено значение 12. Точно так же в полях Средняя стоимость и Полная стоимость — будут вычислены среднее значение и сумма стоимости всех заказов по каждому клиенту. Описание статистических функций SQL приведено в таблице 2.4.

б). В таблице 2.3 перечислены все возможные значения свойства групповые операции.

Таблица 2.3. Возможные значения свойства Групповые операции.

Функция Комментарий
Группировка Указывается для полей, по совпадающим значениям которых происходит объединение записей в одну.
Выражение Указывается для вычисляемых полей.
Условие Указывается для полей, которые не должны попасть в результирующий набор данных, но по которым проверяется условие. Условие для такого поля проверяется до выполнения операции группирования. Если для поля ввести условие и в поле. Групповые операции указать группировка, то условие будет проверяться уже после группировки. Для первого случая в операторе SQL используется предложение WHERE, a для второго — HAVING.

Таблица 2.4. Статистические функции.

Функция Описание
Sum Возвращает сумму значений, содержащихся в заданном поле запроса в записях, группируемых в одну. Синтаксис: S ит(выражение). Аргумент выражение может содержать либо название поля, либо выражение, выполняющее какие-либо вычисления. Выражение может включать имена полей, константы и функции. Функции могут быть определяемыми пользователем (в модуле), но не могут быть другими статистическими функциями. Функция Sum пропускает записи со значением Null в данном поле.
Avg Вычисляет арифметическое среднее набора чисел, содержащихся в указанном поле запроса в записях, входящих в одну группировку. Синтаксис: A vg(выpaжeнue). Замечания относительно аргумента выражение и полей со значением Null те же, что и для функции Sum.
Min, Max Возвращают соответственно минимальное и максимальное значения из набора значений, содержащихся в указанном поле запроса в пределах одной группировки. Синтаксис: Мin(выражение), Мах(выражение). Замечания — те же.
Count Возвращает количество записей, объединяемых в одну при группировке. Синтаксис: Соиnt(выражение). Выражение может быть таким же, как и для выше описанных статистических функций. Функция Count, так же как и остальные функции, не подсчитывает записи, содержащие Null в полях, указанных в выражении. Поэтому, чтобы избежать глупых ошибок, нужно указывать либо обязательные для ввода поля (которые гарантированно будут содержать какое-либо значение — например, первичный ключ), либо подстановочный знак звездочки (например, Count(*)).
StDev Вычисляет величину смещенного стандартного отклонения по набору значений, содержащихся в указанном поле запроса для каждой группировки. Синтаксис: StDev(выраженue). Замечания по поводу выражения и полей со значением Null те же, что и для функции Sum. Кроме того, если группировка содержит меньше двух записей, то функция возвращает значение Null, что означает невозможность вычисления стандартного отклонения. Стандартное отклонение (среднеквадратичное отклонение) — параметр, который указывает величину разброса функции распределения около среднего значения. Он равен квадратному корню из момента для квадрата отклонений от среднего.
Var Возвращает значение смещенной дисперсии, вычисляемой по набору значений, содержащихся в указанном поле запроса для каждой группировки. Синтаксис: Var (выражение). Замечания по поводу выражения и полей со значением Null те же, что и для функции Sum. Если группировка содержит меньше двух записей, функция возвращает значение Null, что означает невозможность вычисления дисперсии. Дисперсия — квадрат значения среднеквадратичного отклонения, мера отличия значений в группе от среднего.
First, Last Возвращают значение поля соответственно из первой и последней записи набора записей в пределах каждой группировки. Синтаксис: First (выражение), Last(выражение). Выражение — такое же, как и для остальных статистических функций. Поскольку записи обычно возвращаются без какого-либо специального порядка (кроме случаев, когда запрос содержит предложение ORDER BY), эти функции возвращают случайные данные

в). Следует обратить внимание на то, что хотя для полей Средняя стоимость и Полная стоимость были указаны групповые операции Avg и Sum соответственно, после сохранения запроса конструктор подставил названия этих функций непосредственно в определение полей, а значение групповой операции изменил на Выражение. В то же самое время, поле Количество заказов осталось без изменений, поскольку в качестве выражения для функции Count указано просто имя соответствующего поля таблицы.

г). При вычислении полей Средняя стоимость и Полная стоимость использовалась функция ССиr, являющаяся одной из функций преобразования типов. Хотя чаще эти функции используются при программировании на Visual Basic, в запросах тоже иногда приходится их использовать. Чаще всего эти функции используются в вычисляемых полях запросов. Например, если из таблицы в запрос добавить поля Количество и Стоимость, а потом добавить вычисляемое поле Цена:[Стоимость]/[Количество], то в результирующем наборе данных в этом поле появятся значения, содержащие огромное количество знаков дробной части.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  




Подборка статей по вашей теме: