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.
у меня получилось только так: создать представление по группам или статусам студентов - а потом использовать это представление для вычисления максимумов минимумов и т.п., но хочется сделать енто одним запросом
Направьте на путь истинный!!! заранее спасибо!
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) в другом запросе.
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;
То есть мы получаем максимум количества студентов и минимум количества студентов по группам.
FROM (
SELECT COUNT(*) AS stds
FROM Students
GROUP BY groupid
) AS sq;
То есть мы получаем максимум количества студентов и минимум количества студентов по группам.