powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите создать сложный запрос. Никто из группы не может.
21 сообщений из 21, страница 1 из 1
Помогите создать сложный запрос. Никто из группы не может.
    #39226501
Николай Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача:
Вывести фамилии преподавателей,у которых в каждой группе, в которых они читали лекции,
есть более 1-го студента с оценкой 5.
Исходные данные:
Таблица Поля таблицы
MARKS - nzach,idprepod,idpredmet,mark,data
STUD - nzach,fio,idgr,birthday,tel
GRUPS - idgr,name
PREDMET - idpredmet,name
PREPOD - idprepod,fio
Где:
nzach - уникальный номер зачетки
mark - оценка

В приложении поместил RAR (таблицы)
Все, что смог - ниже текст запроса, но он работает только для одной группы преподавателя:

SELECT P.fio AS "Преподаватель",G.name AS "Группа",COUNT(*) AS "Кол-во отличников"
FROM
(SELECT M.nzach,M.idprepod,s.idgr FROM marks M,stud S
WHERE M.mark=5 AND M.nzach=S.nzach
GROUP BY idprepod,nzach) AS U
LEFT JOIN prepod P ON P.idprepod=U.idprepod
LEFT JOIN grups G ON G.idgr=U.idgr
GROUP BY U.idprepod,U.idgr
HAVING COUNT(*)>1
;
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226537
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select p.fio
from prepod p
where
not exists (
  select g.idgr
  from GRUPS g
  join STUD s on s.idgr=g.idgr
  join MARKS m on m.nzach=s.nzach and m.idprepod=p.idprepod
  group by g.idgr
  having sum(case when m.mark >= 5 then 1 end) < 1
)
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226555
Николай Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выдает
Error Code: 1054. Unknown column 'p.idprepod' in 'on clause'
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226584
Перенеси в where, поймет?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select p.fio
from prepod p
where
not exists (
  select g.idgr
  from GRUPS g
  join STUD s on s.idgr=g.idgr
  join MARKS m on m.nzach=s.nzach
  where m.idprepod=p.idprepod
  group by g.idgr
  having sum(case when m.mark >= 5 then 1 end) < 1
)
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226596
Николай Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С WHERE поняла.
Но по ходу запрос не верен - выдал просто всех преподавателей.
Сижу, разбираюсь.
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226727
Николай Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получил следующую картинку (см. приложенный файл)
Осталось для каждого преподавателя выбрать только тех, у которого в каждой строчке sum>1
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226732
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
влопп
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select d.idprepod, d.fio
from (
  select r.idprepod, r.fio, r.idgr, count(distinct r.mark)marks, iif(sum(iif(r.mark=5,r.qty_stud,0))>1,1,0) qty5
  from (
    select p.idprepod, p.fio, s.idgr, m.mark, count(distinct s.nzach) qty_stud
    from PREPOD p
    join MARKS m on m.idprepod=p.idprepod
    join STUD s on s.nzach=m.nzach
    group by p.idprepod, p.fio, s.idgr, m.mark
    )r
  group by r.idprepod, r.fio, r.idgr
  ) d
group by d.idprepod, d.fio
having count(*)=sum(d.qty5)
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226733
Добавь во второй запрос else 0 перед end.
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226761
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Более точно, учитывая пятерки одного студента по разным предметам как разные пятерки,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select g.idprepod, p.fio
from (
  select q.idprepod, q.idgr, 1<sum(case q.mark when 5 then q.qty_stud else 0 end) more1x5
  from (
    select m.idprepod, s.idgr, m.mark, count(distinct concat(m.nzach,'-',m.idpredmet))qty_stud
    from MARKS m
    join STUD s on s.nzach=m.nzach
    group by m.idprepod, s.idgr, m.mark
    )q
  group by q.idprepod, q.idgr
  )g
join PREPOD p on p.idprepod=g.idprepod
group by g.idprepod, p.fio
having count(*)=sum(g.more1x5)
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226782
Николай Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,
Спасибо большое!
С ходу проверил - работает. Сейчас пробую менять данные таблиц, чтобы убедиться окончательно.
Судя по запросу, студент с пятерками по разным предметам должен засчитываться все-таки как один студент. Хотя что имел ввиду преподаватель?! Буду уточнять...
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226792
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай NickСудя по запросу, студент с пятерками по разным предметам должен засчитываться все-таки как один студент.
тогда просто count(distinct m.nzach) qty_stud
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226801
Николай Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,
По возможности, ответ на еще один вопрос.
Как исключить из нижеследующего запроса одинаковые записи?

SELECT M.idprepod,S.idgr,SUM(CASE WHEN m.mark>=5 THEN 1 END)
FROM marks M,stud S
WHERE M.nzach=S.nzach
GROUP BY idgr,idprepod ORDER BY idprepod ASC
;
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226811
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
начисто:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select g.idprepod, p.fio
from (
  select idprepod, idgr, sum(mark5*qty_stud) qty5
  from (
    select m.idprepod, s.idgr, iif(m.mark=5,1,0) mark5, count(distinct concat(m.nzach,'-',m.idpredmet))qty_stud
    from MARKS m
    join STUD s on s.nzach=m.nzach
    group by m.idprepod, s.idgr, iif(m.mark=5,1,0)
    ) q
  group by idprepod, idgr
  ) g
join PREPOD p on p.idprepod=g.idprepod
group by g.idprepod, p.fio
having min(qty5)>1



PS Насчет одинаковых записей - не понял...
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226829
Николай Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,
Одинаковые - в смысле дубли. Если есть дублирующая запись в таблице, то студент с 5-ой может просчитаться дважды.
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226840
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай NickCygapb-007,
По возможности, ответ на еще один вопрос.
Как исключить из нижеследующего запроса одинаковые записи?

Код: sql
1.
2.
3.
4.
SELECT  M.idprepod,S.idgr,SUM(CASE WHEN m.mark>=5 THEN 1 END)
  FROM marks M,stud S
  WHERE M.nzach=S.nzach
  GROUP BY idgr,idprepod ORDER BY idprepod ASC


;
выполняется группировка, исключающая дублирование записей с одинаковыми ( idgr,idprepod )

Еще раз - что такое "одинаковые записи"?
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226842
Николай Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,
Думаю, что прокатит твой вариант.
Я, правда, хотел выдать результат в виде:

Преподаватель Группа Кол-во отличников
Иванов А-41 2
Иванов А-43 3
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226844
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай NickCygapb-007,
Одинаковые - в смысле дубли. Если есть дублирующая запись в таблице, то студент с 5-ой может просчитаться дважды.
а, не въехал сразу.
То есть по одним и тем же студентом одному предмету в разные даты получено несколько пятерок?
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226851
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай NickCygapb-007,
Думаю, что прокатит твой вариант.
Я, правда, хотел выдать результат в виде:

Преподаватель Группа Кол-во отличников
Иванов А-41 2
Иванов А-43 3
Я бы написал
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
select idprepod, fio, g.name group_name, qty5
from (
  select g.idprepod, p.fio, g.idgr, g.qty5, min(g.qty5)over(partition by g.idprepod)min_qty5
  from (
    select idprepod, idgr, sum(mark5*qty_stud) qty5
    from (
      select m.idprepod, s.idgr, iif(m.mark=5,1,0) mark5, count(distinct concat(m.nzach,'-',m.idpredmet))qty_stud
      from MARKS m
      join STUD s on s.nzach=m.nzach
      group by m.idprepod, s.idgr, iif(m.mark=5,1,0)
      ) q
    group by idprepod, idgr
    ) g
  join PREPOD p on p.idprepod=g.idprepod
  )n
join GRUPS g on g.idgr=n.idgr
where n.min_qty5>1
order by 2,3

но в MySQL так не прокатит ))
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226889
Николай Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,
Мда, в MYSQL действительно не катит (синтаксическая ошибка).
Ладно, буду пробовать сдать твой первый вариант.
Спасибо еще раз!
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226903
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай NickЛадно, буду пробовать сдать твой первый вариант.
Гы...
А навесить еще одну группировку не судьба)?
...
Рейтинг: 0 / 0
Помогите создать сложный запрос. Никто из группы не может.
    #39226919
Николай Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,
Конечно же буду пробовать.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите создать сложный запрос. Никто из группы не может.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]