LINUX.ORG.RU

Запрос MySql с вложенным select

 , , ,


0

1

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


Я попробовал составить запрос (не получается составить сиснтаксис правильный):

select name, avg(B) from faculties join groups on groups.code_fac = faculties.code_fac join students on students.group_number = groups.number (seelct select group_number, count(*) as B from students group by group_number) B group by name;


Я попробовал переделать:

select name, avg(B.*) from faculties join groups on groups.code_fac = faculties.code_fac join students on students.group_number = groups.number where B in (select group_number, count(*) from students group by group_number) group by name;

Так как данная логика по идее даёт мне требуемый результат, не выкладываю предыдущии попытки.



Последнее исправление: wojaovlad (всего исправлений: 2)

Сделал таким образом:

select faculties.name as faculty, avg(B) as avg_students from faculties join groups on groups.code_fac = faculties.code_fac join (select group_number, count(*) as B from students group by group_number) as T on groups.number = T.group_number group by name;

Вроде всё правильно_)

wojaovlad
() автор топика
Ответ на: комментарий от wojaovlad

почему все в одну строку то??

select
  faculties.name as faculty,
  avg(B) as avg_students
from faculties
join groups on groups.code_fac = faculties.code_fac
join (
  select
    group_number,
    count(*) as B 
  from students
  group by group_number
) as T on groups.number = T.group_number
group by name;

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.