powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
14 сообщений из 14, страница 1 из 1
Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
    #39223406
_mak_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер, есть три таблицы Exam(name,lesson,item(оценка по экзамену, если не пришел на экзамен, то стоит null)); Lessons(lesson,grade(номер класса),abc(буква класса),edate(дата экзамена по этому предмету,если по этому предмету нет экзамена, то стоит null)); Students(name,grade,abc). То что указанно в скобках-это название атрибутов таблицы.

Задача: Вывести всех учеников, которые завалили ВСЕ экзамены, на которые ПРИШЛИ(значит в edate не должно быть=null). К примеру, Аносов не пришел на два экзамена, но пришел на один и здал его на 2(система десятибальная), значит наш клиент, выводим его, а Тимохин тоже не пришел на два экзамена, но пришел на третий и здал его на 4 балла(1,2,3=это проваленный экзамен, 4,5,6,7,8,9,10=это сданный экзамен), значит он нам не подходит,т.к. он пришел на один экзамен и сдал его . Я приложу саму бызу данных.
Я понял, только что нам нужно задействовать все три таблицы, чтобы узнать сколько всего экзаменов он должен здать, в каком классе и т.д., но как дальше я не понял.
Я сделал так, но подпрограмма не может выдавать больше одного значения, а как переделать, не понимаю.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT name
FROM lessons l,exam e,students s
WHERE  (s.name=e.name) AND (l.lesson=e.lesson) AND (s.grade=l.grade)
 AND (l.abc=s.abc) AND (item<4)
GROUP BY name
HAVING COUNT(item)=(SELECT COUNT(*)
FROM lessons l,exam e,students s
WHERE  s.name=e.name AND l.lesson=e.lesson AND s.grade=l.grade
 AND l.abc=s.abc AND item IS NOT NULL
GROUP BY name)
ORDER BY 1
...
Рейтинг: 0 / 0
Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
    #39223407
_mak_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
    #39223412
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подзапрос тут лишний, просто убери его.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
    #39223417
_mak_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что тогда в HAVINGе писать?
Если я его уберу, то запрос будет неправильный, т.к. он мне выведет всех тех, кто НЕ СДАЛ, ХОТЯБЫ ОДИН экзамен, а мне нужно именно те экзаменны, которые ученик посетил и их ВСЕХ ЗАВАЛИЛ.
...
Рейтинг: 0 / 0
Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
    #39223419
_mak_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не экзаменны,а ученики,оговорочка
...
Рейтинг: 0 / 0
Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
    #39223420
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_mak_sмне нужно именно те экзаменны, которые ученик посетил и их ВСЕХ ЗАВАЛИЛ.

Вопрос на засыпку: может ученик сдать экзамен, который не посетил?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
    #39223421
_mak_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так в том-то и дело, что мы не должны рассматривать, те экзамены, которые ученик не посетил, Аносов прогулял два, да и фиг с ним, главное, что он пришел на один и не сдал его, а Болибрух, к примеру, пришел на все и не сдал только один, и по моему запросу Болибруха выводит, а не должно, т.к. он завалил только ОДИН экзамен, а пришел-то ведь на три.
Я поэтому не понимаю, как это сделать, если можете, то , будьте любезны, напишите код.
...
Рейтинг: 0 / 0
Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
    #39223422
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_mak_sтак в том-то и дело, что мы не должны рассматривать, те экзамены, которые
ученик не посетил
Почему?

Ты в самом деле не в состоянии переформулировать задачу как "вывести всех учеников,
которые не сдали ни одного экзамена на который пришли"?.. Тебе не очевидно, что у таких
учеников максимальная оценка будет меньше четвёрки?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
    #39223424
_mak_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче, я убрал, как Вы и сказали подзапрос, и она работает некоректно, т.к. мне выводит учеников, которые пришли на 3 экзамена и при этом не сдали 1 или 2 экзамена, а для того чтобы появится в списке, по условию задачи, количество незданных экзаменов должно быть равно количеству экзаменов, на которые ученик изволил явиться, как это сделать?
...
Рейтинг: 0 / 0
Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
    #39223442
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_mak_sкак это сделать?
Какое слово из "максимальная оценка будет меньше четвёрки" ты не смог прочитать?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
    #39223445
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_mak_s,

Код: plsql
1.
2.
3.
4.
5.
select distinct s.NAME
  from EXAM e
  join LESSONS l on ( l.LESSON = e.LESSON )
  join STUDENTS s on ( s.NAME = e.NAME and s.GRADE = l.GRADE and s.ABC = l.ABC )
 where ( select max( ITEM ) from EXAM where NAME = s.NAME ) < 4
...
Рейтинг: 0 / 0
Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
    #39223446
_mak_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче, я глупый, напишите фрагмент кода, будьте любезны, я вообще не понимаю, что максимальный, и что дальше??
...
Рейтинг: 0 / 0
Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
    #39223447
_mak_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо
...
Рейтинг: 0 / 0
Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
    #39226049
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_mak_sВывести всех учеников, которые завалили ВСЕ экзамены, на которые ПРИШЛИ(значит в edate не должно быть=null)

Пришёл на НОЛЬ экзаменов и все НОЛb экзаменoв завалил - это какой случай?

Нет столбца edate в таблице Exam

_mak_sЯ понял, только что нам нужно задействовать все три таблицы, чтобы узнать сколько всего экзаменов он должен здать, в каком классе и т.д., но как дальше я не понял.

а какая нам разница, сколько он ДОЛЖЕН сдать ?
а какая нам разница, сколько в каком он классе?
а какая нам разница "и т.д." и что этo такое вообще?

Код: sql
1.
2.
3.
4.
select distinct name
from exam
group by name
having MAX(item) < 4
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вывести всех учеников, которые завалили ВСЕ экзамены, на который ПРИШЛИ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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