БД / Базы данных / Лабораторные работы / Лабораторная №11(Запросы на группирование)
.docЛабораторная работа № 10.
Тема: Запросы в Access(Запросы на группирование)
Запросы на группирование.
Этот тип запросов позволяет нам определить группы записей на основе значений одного или несколько полей и для этих групп вычислить групповые характеристики (например, количество записей входящих в каждую группу или суммарное значение некоторой характеристики для этой группы).
Например, если мы сгруппируем таблицу Продукты по ТипуПродуктов, то у нас получится 5 групп (столько у нас категорий продуктов).


Результатом этого запроса будет следующая таблица:

По умолчанию, поле задания параметра группировки является скрытым, но если, имея какой-нибудь запрос в режиме конструктора, обратиться в системное меню ВИД и кликнуть там мышью по режиму ГРУППОВЫЕ ОПЕРАЦИИ, то в бланке запроса появится дополнительная строка с аналогичным наименованием.
По умолчанию, в строке " Групповые операции" СУБД устанавливает условие "Группировка", в соответствие с которым данные по каждому полю группируются, но результат не выводится. Если же нужен некий конкретный результат, то вместо "группировки" следует применить одну из девяти групповых функций (см. таблицу).
|
Наименование |
Назначение |
|
SUM |
Вычисляет сумму всех значений заданного поля в каждой группе. Применяется только для числовых и денежных полей. |
|
AVG |
Вычисляет среднее арифметическое всех значений данного поля в каждой группе. Применяется только для числовых и денежных полей. |
|
MIN |
Возвращает наименьшее значение в рамках каждой группы. Применяется для любых полей, кроме логических и "мемо". В случае текстового содержания, возвращается наименьшее символьное значение независимо от регистра. |
|
MAX |
Возвращает наибольшее значение в рамках каждой группы. Применяется для любых полей, кроме логических и "мемо". В случае текстового содержания, возвращается наибольшее символьное значение независимо от регистра. |
|
COUNT |
Возвращает число записей, в которых значение данного поля отличается от Null. Хотя при использовании конструкции Count (*) можно подсчитать число всех записей, включая "нулевые". |
|
STDEV |
Подсчитывает статистическое стандартное отклонение для всех значений данного поля в каждой группе. Функция применяется только для числовых и денежных полей. Если в группе менее двух записей, возвращается значение Null. |
|
VAR |
Подсчитывает статистическую дисперсию для всех значений данного поля в каждой группе. Применяется только к числовым и денежным полям. Если в группе менее двух записей, возвращается значение Null. |
|
FIRST |
Возвращает первое значение этого поля в группе. |
|
LAST |
Возвращает последнее значение этого поля в группе. |
Кроме стандартных, в Access допустимы и два дополнительных варианта: "Выражение" и "Условие".
Выбрав вариант "Выражение" в строке "Поле", можно задать конкретное выражение, например Max [(наименование поля)] - Min[(наименование поля)], на соответствие с которым программа должна проводить проверку. В данном случае она покажет максимальную величину разброса некоторого параметра, хранимого в данном поле. Выбор "Условия" активизирует ссылку на строку " Условие отбора", что позволяет в значительной мере расширить число возможных комбинаций вариантов выполнения групповых операций. Так, например, применение режима "Условие" в графе " Калории" позволяет сначала получить из общего массива только конкретные данные, а уже к ним применить всю мощь аппарата запросов Access, причем сделать все это в одном запросе, а не в несколько приемов.
Задание.
-
Подсчитайте количество продуктов каждого типа. Отсортируйте по количеству продуктов (Таблица Продукты).
-
Подсчитайте, на какую сумму сделаны заказы продуктов
-
Определите сети магазинов (несколько магазинов с одним названием). В какой сети больше всего магазинов
-
В какие магазины заказали одинаковые продукты
Указания. Этот запрос выполняется в два этапа:
-
На первом этапе находим, какие одинаковые продукты были заказаны. Этот запрос выполняется по таблицы ПродуктыЗаказа


Результирующая таблица будет следующая:

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



Перекрестный запрос.
Это специальный тип запроса, в котором можно группировать по строкам и столбца. Для создания этого запроса нужно создать новую таблицу Сотрудники, содержащую следующие данные:
-
Фамилия
Месяц
Заработок
Иванов
Январь
350
Петров
Январь
600
Сидоров
Январь
250
Иванов
Январь
400
Иванов
Январь
370
Сидоров
Январь
300
Иванов
Февраль
500
Петров
Февраль
380
Сидоров
Февраль
320
Сидоров
Февраль
500
Таблицу Сотрудники создайте путем Ввода данных. Переименуйте столбцы, чтобы они назывались соответствующим образом. Сохраните, создав автоматически первичный ключ.
Из анализа таблицы можно увидеть, что сотрудникам закрывают наряды на зарплату несколько раз в месяц (по мере выполнения работы) и учет ведется по месяцам. Было бы очень удобно увидеть, какие суммы заработал каждый сотрудник в каждом месяце. Для этого и служат перекрестные запросы.
Создание перекрестного запроса в режиме мастера.

Выбираем тип нового запроса Перекрестный запрос.
Выполните следующие действия:
-
Выберите таблицу Сотрудники
-
Выберите поле Фамилия в качестве заголовков строк в перекрестной таблице
-
Выберите поле Месяц в качестве заголовков столбцов в перекрестной таблице
-
Задайте в следующем окне поле Зарплата и тип вычисления Сумма
И готово!

В результате вы получите вот такую перекрестную таблицу.
Откройте таблицу в режиме конструктора вы увидите следующее:

Внимание! Посмотрите какие новые строки добавлены в бланк таблицы.
Создание перекрестного запроса в режиме конструктора.
Для создания запроса в режиме конструктора задайте имя таблицы Сотрудники, откройте пустой бланк запроса и установите тип запроса Перекрестный через контекстное меню или выбрав из списка на панели инструментов. После этого определите столбцы Фамилия, Месяц, Зарплата и вычисляемое поле Итог: Зарплата.
В строке Групповая операция задайте для первых двух столбцов Группировка, для остальных двух – SUM.
В строке Перекрестная таблица задайте для 1-го столбца – заголовки строк, 2-го столбца – заголовки столбцов, 3-го – значения, 4-го – заголовки строк.
Посмотрите полученный результат.
Задание.
-
Создайте многотабличный запрос по таблицам Продукты, ПродуктыЗаказа, Заказы, Магазины. Результирующие столбцы – Название продуктов, Название магазинов и Количество продуктов. Сделайте перекрестную таблицу для получения информации о том, какое количество продуктов одного наименования было заказано магазинами.
