Фраза GROUP BY позволяет объединить множество строк, получаемых после применения фразы WHERE, в группы по признаку равенства значений одного или нескольких столбцов. В этом случае агрегатные функции, используемые во фразе SELECT, действуют не на всем результирующем отношении, а в пределах каждой группы. Далее, если во фразе SELECT, присутствуют имена столбцов, то это должны быть те столбцы, по которым производится группирование. Рассмотрим несколько примеров.
1) Выдать количество студентов на всех кафедрах факультета информатики.
SELECT DEPARTMENT.Name,
SUM(GROUP.Quantity) Number-Of-Students-In-The-Departments
FROM FACULTY, DEPARTMENT, GROUP
WHERE FACULTY.#F = DEPARTMENT.#F AND
DEPARTMENT.#D = GROUP.#D AND
FACULTY.Name = "IT"
GROUP BY DEPARTMENT.Name
2) Выдать количество преподавателей по факультетам ВУЗа
SELECT FACULTY.Name, Count(*) Number-Of-Teachers-In-The-Faculty
SUM(GROUP.Quantity) Number-Of-Students-In-The-Departments
FROM FACULTY, DEPARTMENT, TEACHER
WHERE FACULTY.#F = DEPARTMENT.#F AND
DEPARTMENT.#D = TEACHER.#D
GROUP BY FACULTY.Name
3) Выдать количество дисциплин, читаемых преподавателями ВУЗа
SELECT TEACHER.Name, COUNT(DISTINCT #S ) Number-Of-Subjects-Taught-By-The-Teacher
FROM TEACHER, LECTURE
WHERE TEACHER.#T = LECTURE.#T
GROUP BY TEACHER.Name
4) Выдать фонды факультетов, полученные из отношения FACULTY и вычисленные как сумма фондов кафедр.
SELECT FACULTY.Name, Faculty.Fund, SUM(DEPARTMENT.Fund) Sum-Of-All-Departments-Funds
FROM FACULTY, DEPARTMENT
WHERE FACULTY.#F = DEPARTMENT.#F AND
GROUP BY FACULTY.Name