Фраза GROUP BY оператора SELECT применяется для определения группы строк, над которыми выполняются функции агрегирования. Если в операторе SELECT указана фраза GROUP BY, то все имена столбцов, указываемые в списке для определения создаваемого результирующего набора, должны быть указаны с функциями агрегирования, поскольку для каждой группы строк в результирующий набор будет включена только одна строка, содержащая значения полученные функциями агрегирования над данной группой строк.
К функциям агрегирования относятся следующие функции языка SQL:
COUNT - подсчет количества всех значений столбцов за исключением значения NULL и с учетом указания фраз ALL или DISTINCT;
COUNT (*) - подсчет количества всех значений столбцов в группе;
AVG - определение среднего значения;
SUM - подсчет суммы всех значении группы. Если при этом получаемое значение выходит за пределы суммируемого типа данных, то инициируется ошибка выполнения SQL-оператора;
MAX - определение максимального значения из группы;
MIN - определение минимального значения из группы.
Фраза HAVING оператора SELECT определяет предикат аналогично фразе WHERE, но применяемый к строкам, полученным в результате выполнения функций агрегирования.
Приведем пример выбора с применением групп. Столбец dno имеет всего три различных значения: 11, 22 и 33. Для каждой из трех групп находится минимальное и максимальное значение столбца f2:
SELECT dno, MIN(f2), MAX(f2) FROM tbl1 GROUP BY dno;
Результатом выполнения этого SQL-оператора будет формирование следующих строк:
DNO
MIN(f2)
MAX(f2)
При выборе с применением групп и с дополнительным ограничением на значение в столбце MIN(f2):
SELECT dno, MIN(f2), MAX(f2) FROM tbl1 GROUP BY dno HAVING MAX(f2) < 1000;
В результате выполнения этого SQL-оператора будут возвращены только две строки: первая и последняя: