Показать сообщение отдельно
Старый 06.05.2005, 10:31     # 10
Kiva
Junior Member
 
Аватар для Kiva
 
Регистрация: 15.05.2002
Сообщения: 168

Kiva Луч света в тёмном царствеKiva Луч света в тёмном царствеKiva Луч света в тёмном царствеKiva Луч света в тёмном царствеKiva Луч света в тёмном царстве
Вы совершенно правы, в том подзапросе закралась ошибочка, он должен быть таким же как и первый. Ведь идея заключается вот в чем, получаем множество студентов со средними значениями по кафедрам и получаем множество студентов с максимальными значениями по кафедрам, на основе первого запроса,. И из первого множества выбираем только те что входят во второе. Тем самым показывая 'злощастных' студентов.

В oracle это работает:
Код:
SQL> select k.kafedra, k.student, k.avgrade
  2  from (                                                 
  3     select G.K kafedra, S.SNAME student, AVG(E.GRADE) avgrade
  4     from G join S on G.NG=S.GN join E on S.S=E.S             
  5     group by  G.K, S.SNAME) k
  6  where (k.kafedra, k.avgrade) in (
  7     select m.kafedra, MAX(m.avgrade)
  8     from (
  9             select G.K kafedra, AVG(E.GRADE) avgrade
 10             from G join S on G.NG=S.GN join E on S.S=E.S
 11             group by  G.K, S.SNAME) m
 12     group by m.kafedra
 13     );

KAFEDRA              STUDENT       AVGRADE
-------------------- ---------- ----------
kat1                 Petrov              7
kat2                 Vasin               7

SQL> select G.K kafedra, S.SNAME student, AVG(E.GRADE) avgrade
  2     from G join S on G.NG=S.GN join E on S.S=E.S             
  3     group by  G.K, S.SNAME;

KAFEDRA              STUDENT       AVGRADE
-------------------- ---------- ----------
kat1                 Ivanov     5.33333333
kat1                 Petrov              7
kat1                 Pupkin              5
kat1                 Sidorov    4.83333333
kat2                 Lenin      6.33333333
kat2                 Mishin              6
kat2                 Popov      5.66666667
kat2                 Vasin               7

8 rows selected.

SQL> select G.K kafedra, AVG(E.GRADE) avgrade
  2             from G join S on G.NG=S.GN join E on S.S=E.S
  3             group by  G.K, S.SNAME;

KAFEDRA                 AVGRADE
-------------------- ----------
kat1                 5.33333333
kat1                          7
kat1                          5
kat1                 4.83333333
kat2                 6.33333333
kat2                          6
kat2                 5.66666667
kat2                          7

8 rows selected.

SQL> select m.kafedra, MAX(m.avgrade)
  2     from (
  3             select G.K kafedra, AVG(E.GRADE) avgrade
  4             from G join S on G.NG=S.GN join E on S.S=E.S
  5             group by  G.K, S.SNAME) m
  6     group by m.kafedra;

KAFEDRA              MAX(M.AVGRADE)
-------------------- --------------
kat1                              7
kat2                              7
Похоже что в Accesse Inline View не работают.
__________________
"Да, человек смертен, но это было бы еще полбеды. Плохо то, что он иногда внезапно смертен, вот в чем фокус!"
Михаил Булгаков. Мастер и Маргарита

Последний раз редактировалось Kiva; 06.05.2005 в 11:27.
Kiva вне форума