Нет записей, возвращенных в запросе из 3 таблиц

#mysql

#mysql

Вопрос:

Мне нужно запросить 3 таблицы, чтобы извлечь среднюю оценку по всем учителям

У меня есть следующие таблицы :

Для студентов

 create table students

(id int not null auto_increment,
    surname varchar(100) not null,
    name varchar(100) not null,
    primary key (id),
    unique(nume,prenume)
  );
  

УЧИТЕЛЯ

 create table teachers(
    id int not null auto_increment,
    surname varchar(100) not null,
    name varchar(100) not null,
    primary key (id),
    unique(nume,prenume)
    );
  

КАТАЛОГ

 create table catalog (
    id int not null auto_increment,
    `data` datetime not null,
    id_teacher int not null,
    id_student int not null,
    nota int not null,
    primary key (id),
    FOREIGN KEY (id_teacher) REFERENCES teachers(id),
    FOREIGN KEY (id_student) REFERENCES students(id)
  );
  

Мне нужно сделать запрос, из которого будут получены учащиеся со средней степенью> 7,5 для всех учителей.

Я пробовал это, но безрезультатно, и я не понимаю, что не так :

 select avg(c.nota) AS 'medie', c.id_student, e.surname, e.name, c.id_teacher, p.surname, p.name from catalog c
left join students e on e.id = c.id_student
left join teachers p on p.id = c.id_teacher
group by c.id_teacher
having avg(c.nota) > 7.5;
  

Комментарии:

1. У вас есть данные в ваших таблицах? Можете ли вы сообщить некоторые данные в своем вопросе?

2. 1 2013-09-04 07:47:20 1 1 4 2 2017-10-27 08:19:47 2 2 6 3 2017-02-10 12:53:34 3 3 7 4 2018-11-04 06:20:40 4 4 10 5 2014-12-26 08:12:38 5 5 9 6 2017-10-05 06:39:40 6 6 47 2016-03-14 06:28:56 7 7 7 8 2016-03-22 06:41:30 8 8 8 9 2013-10-06 11:16:33 9 9 10 Это данные из каталога — id / data / id_teacher/ id_student/ степень

3. Научитесь правильно использовать GROUP BY . Ваше утверждение даже не имеет смысла.

Ответ №1:

С помощью этого запроса:

 select s.id, avg(c.nota) medie
from catalog c
inner join students s on s.id = c.student_id
inner join teachers t on t.id = c.teacher_id
group by s.id, t.id
  

вы получаете идентификаторы всех учащихся со средним значением> 7,5 для каждого преподавателя.
Затем присоединитесь к students таблице:

 select s.id, s.surname, s.name 
from students s inner join (
  select s.id, avg(c.nota) medie
  from catalog c
  inner join students s on s.id = c.student_id
  inner join teachers t on t.id = c.teacher_id
  group by s.id, t.id
) g  ON g.id_student = s.id
group by s.id, s.surname, s.name 
having min(g.medie) > 7.5
  

Комментарии:

1. Спасибо forpas за ответ. Требование заключается в использовании 3 таблиц . У одного ученика может быть несколько «medie» для одного учителя или всех учителей. У них должно быть минимальное значение> 7.5 у всех учителей.

2. У одного ученика может быть несколько «средних» значений для одного учителя или всех учителей ? У каждого ученика есть только 1 nota для учителя?

3. у ученика более 1 «примечания» для учителя. И у ученика может быть больше «примечаний» и он может быть предоставлен всем преподавателям.

4. у ученика больше «нот» для учителя , хорошо, но что это значит: у ученика может быть больше «нот» и быть распределенным для всех учителей ?

5. # id_student, id_teacher, примечание ‘9’, ‘9’, ’10’ ‘9’, ’66’, ‘6’ ‘9’, ’67’, ‘9’ ‘9’, ’69’, ’10’ например, тот же студент (id 9) имеет4 учителя, но он не должен быть возвращен в запросе, потому что у него 1 примечание из 6