SQL « Требуется помощь в создании запросах с функциями max(min), avg,sum

Есть база данных student
3 таблицы
1. students: id(pk),family, name,parentname,groupid(fk),student_status(fk);
2.grops: id(pk),name,entranse;
3.student_status: id(pk),name.

в этой базе данных надо применить вышеназванные функции
понимаю, что запрос должен звучать примерно так - какое максимальное(минимальное, среднее, общее) количество студентов в группе
или
в каком году поступило максимальное(минимальное, среднее, общее) количество студентов

но реализовать это не получается
по логике понимаю(если правильно),что надо выбирать студенты и группа, группировать их и потом как-то (не понимаю как) вытаскивать при помощи count(*) и записывать в значение соответствующей группы, а после уже выбирать max(min), avg,sum.

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

1 ответов


Вообще, было бы неплохо, если бы вы конкретизировали что вам нужно получить. Пока что это тянет на обычный запрос с группировкой.
Но вообще, вы явно подошли к понятию подзапроса. Например, создавая представление, вы фактически пытаетесь получить промежуточный результат. Ровно то же самое можно получить с помощью подзапроса: сначала генерится некоторая промежуточная выборка, а потом она используется как источник для другого запроса.

Допустим, для начала мы получим количество студентов по группам.

SELECT COUNT(*) AS stds
FROM Students
GROUP BY groupid;
То есть количество студентов по группам.
Теперь используем это отношение как источник (FROM) в другом запросе.
SELECT MAX(stds) AS max_stds, MIN(stds) AS min_stds
FROM (
   SELECT COUNT(*) AS stds
   FROM Students
   GROUP BY groupid
) AS sq;
То есть мы получаем максимум количества студентов и минимум количества студентов по группам.