Команда Group by языка SQL позволяет разбить все записи на группы и для каждой группы записей сформировать одну запись. Таким образом, итоговая таблица будет состоять из сгруппированных записей. Группировка может быть выполнена по одному или нескольким полям. Поскольку таблица, полученная в результате выполнения запроса, будет состоять из сгруппированных записей, для каждого поля, входящего в запрос по которому группировка не выполняется, необходимо указать выражение, которое вычисляется на множестве значений данного поля в группе. В качестве таких выражений используются агрегатные функции.
Функция Sum() возвращает значение суммы для группы записей.
Функция Avg() используется для нахождения среднего значения для записей, входящих в группу.
Функция Count() используется для нахождения количества записей в группе.
Функция Min() используется для нахождения минимального значения.
Функция Max()используется для нахождения максимального значения.
Функции First() и Last() возвращают соответственно значение поля из первой и последней записи группы.
Помимо агрегатных функций в запрос на выборку с группировкой могут быть включены поля, представляющие собой условия, используемые для проверки: будет ли включена данная запись в группу или нет.
Приведем пример запроса на выборку с группировкой. Требуется определить сумму поставок по каждому поставщику и по каждому виду продукции за определенный год. В данном случае сгруппировать записи нужно по двум полям: КодПост и КодТов. Из всех записей будет необходимо выбрать только те, которые относятся к 2003 году:
Where Year (Поставка.ДатаПост)=2003.
Для расчета суммы будет использоваться агрегатная функция Sum():
Sum(Цена*КолТов) as СумПост.
В синтаксической конструкции запроса на выборку с группировкой агрегатные функции выступают в качестве вычисляемых полей. Для определения их имени используется команда As.
С учетом приведенных пояснений можно записать текст запроса:
Select Поставка.КодПост, First(НаимПост) as [Наименование поставщика],
Товар.КодТов, First(НаимТов) as [Наименование товара],
Sum(Цена*КолТов) as СумПост
From Поставщик Inner Join (Поставка Inner Join Товар on
Поставка.КодТов = Товар.КодТов) on
Поставщик.КодПост = Поставка.КодПост
Where Year (Поставка.ДатаПост)=2003
Group by Поставщик.КодПост, Товар.КодТов
В списке полей команды Select для некоторых полей используются агрегатные функции, для других – нет. Агрегатные функции могут не использоваться только для тех полей, по которым выполняется группировка. В данном примере это поля КодПост и КодТов.