- •Язык запросов sql
- •Общие сведения
- •Insert - запрос на добавление;
- •Инструкция select
- •Синтаксис select
- •Расширения инструкции select в access
- •Порядок выполнения выборки
- •Управление списком выбора
- •Указание источника данных
- •Применение реляционных операторов
- •Применение булевых операторов
- •Обработка неопределенных значений
- •Сортировка данных
- •Вычисление агрегатных функций
- •Группировка данных
- •Ограничение для групп данных
- •Выборка из нескольких таблиц
- •Соединение отношений
- •Выборка из нескольких таблиц
- •Соединение отношений
- •Запрос с соединением, использующий from и where
- •Запрос с соединением join
- •Запрос с соединением, использующий from и where
- •Запрос с соединением join
- •Операции с таблицами
- •Изменение структуры таблицы
- •Удаление таблицы
- •Действия со строками
- •Вставка строк в таблицу
- •Изменение данных в таблице
- •Удаление данных из таблицы
- •Инструкция transform
- •In ("Физика", "Математика");
- •Глава 5 Работа с формами
Группировка данных
Предложение GROUP BY является одним из основных компонентов команды SELECT и позволяет определять некоторое подмножество значений для указанного в запросе поля и применять агрегатную функцию к полученному подмножеству. Это дает возможность значительно расширить диапазон использования агрегатных функций в предложении SELECT.
Предложение GROUP BY имеет следующий синтаксис:
SELECT selectionjist FROM table_name (GROUP BY groupjist];
где groupjist обозначает список группировки с указанием элементов таблицы, в которых будут формироваться подмножества значений. В качестве элементов таблицы могут выступать имена столбцов, выражения или их порядковые номера.
Например, узнаем, сколько студентов проживает в каждой области (поле fRegion). Для этого можно использовать оператор GROUP BY, при помощи которого следует выполнить группировку по полю fRegion таблицы tbIStudents. При этом все записи по каждой области будут объединены в отдельные группы. В каждой такой группе может быть от одной до нескольких записей в зависимости от того, сколько студентов проживает в данной области.
После этого с помощью функции COUNT подсчитаем количество записей в каждой отдельной группе. У функции в качестве аргумента следует указывать то поле, из которого будут выбираться данные для подсчета; для нашего примера - это поле fRegion. Команду выборки можно записать в следующем виде:
SELECT fRegion, COUNT (fRegion)
FROM tbIStudents GROUP BY fRegion;
В первом столбце запроса отобразятся названия областей, а во втором - количество проживающих в каждой из них студентов.
В рассмотренном примере использовалась группировка данных всей таблицы в целом. После этого для полученных групп данных применялась агрегатная функция. Однако не всегда имеется необходимость обработки всех записей таблицы в целом, особенно если она очень велика. Обычно обрабатывается только необходимый диапазон значений, для чего в запросе используется предложение WHERE.
При совместной работе в запросе предложений WHERE и GROUP BY их вычисление производится в три этапа следующим образом:
-
Из таблицы отбираются только те строки, которые удовлетворяют условиям, заданным в предложении WHERE.
-
Выделенный диапазон строк делится предложением GROUP BY на группы.
-
К полученным данным применяются агрегатные функции, имеющиеся в списке выбора оператора SELECT.
Например, требуется узнать, сколько студентов проживает в Московской и Белгородской областях. Для решения этой задачи вначале необходимо среди всех областей выделить Московскую и
Белгородскую, затем сгруппировать записи по областям (поле fRegion), после чего при помощи агрегатной функции COUNT подсчитать количество студентов, проживающих в каждой из областей.
В результате получится такой запрос:
SELECT fRegion, COUNT (fRegion)
FROM tbIStudents
WHERE fRegion IN ('Московская', 'Белгородская')
GROUP BY fRegiftn;
Как и для обычных запросов, результаты выборки с использованием группировки также можно расположить в определенном порядке для улучшения работы с ними.
Например, составим запрос, отображающий количество студентов, проживающих в Московской, Петербуржской и Белгородской областях. При этом данные должны выводиться по убыванию количества студентов (т.е. наиболее «населенная» область должна отображаться первой).
Запрос будет иметь следующий вид:
SELECT fRegion, COUNT (fRegion)
FROM tbIStudents
WHERE fRegion IN ('Московская', 'Петербуржская', 'Белгородская')
GROUP BY fRegion ORDER BY 2 DESC;
Примечание. Как уже отмечалось, все предложения в операторе SELECT следуют в определенном порядке. Поэтому GROUP BY всегда должно находиться перед ORDER BY, иначе возникнет ошибка.