Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2011, 14:37   #1
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию Функция COUNT(*) и вариации на тему.

Здравствуйте, уважаемые программисты)

Не могу решить задачу - подскажите))
Требуется подсчитать количество предметов читаемых на каждом курсе, при этом имеется следующая база данных -
Код:
 table SUBJECT
(
  SUBJ_ID   NUMERIC not null,
  SUBJ_NAME VARCHAR(100),
  HOUR      NUMERIC,
  SEMESTER   NUMERIC
);


 table STUDENT
(
  STUDENT_ID NUMERIC not null,
  SURNAME    VARCHAR(60),
  NAME       VARCHAR(60),
  STIPEND    NUMERIC(16,2),
  KURS       NUMERIC,
  CITY       VARCHAR(60),
  BIRTHDAY   DATE,
  UNIV_ID    NUMERIC
);
 table EXAM_MARKS
(
  EXAM_ID    NUMERIC not null,
  STUDENT_ID NUMERIC not null,
  SUBJ_ID    NUMERIC not null,
  MARK       NUMERIC,
  EXAM_DATE  DATE
);
Собственно сам я вроде как смог найти число предметов для каждого семестра -
Код:
 SELECT SEMESTER , COUNT(*) FROM SUBJECT GROUP BY SEMESTER;
а вот с курсом проблемы.....подскажите - может ли быть задача решена таким способом -
Код:
SELECT STUDENT.KURS , COUNT(*) FROM STUDENT JOIN EXAM_MARKS JOIN SUBJECT  GROUP BY STUDENT.KURS;
К сожалению проверить не получается....комп виснет -
видимо, пытаясь получить декартово произведение....
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 25.01.2011, 15:40   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
...FROM STUDENT JOIN EXAM_MARKS JOIN SUBJECT
простите, по сути я пока ничего не прочитал в Вашем сообщении, но крайне шокирован!
А что Вы пытаетесь сделать?!!!

Вы действительно перемножаете все три таблицы друг с другом!
В JOIN обязательно надо указывать условие связи таблиц (ON Таблица1.поле1 = Таблица2.Поле1) - иначе, либо результата вообще не дождётесь, либо получите какое-то астрономическое число, которое ничего не даёт и никому не нужно!


p.s. сейчас голова другим занята.. если никто не ответит, попозже постараюсь помочь с Вашим запросом...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.01.2011, 16:07   #3
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Цитата:
какое-то астрономическое число, которое ничего не даёт и никому не нужно!
да-да)) видимо так и получается.....просто не знаю как сопоставить курс и два семестра в нём...такой запрос оказывается синтаксически неправильным-
Цитата:
SELECT STUDENT.KURS , COUNT(*) FROM STUDENT LEFT JOIN EXAM_MARKS LEFT JOIN SUBJECT GROUP BY STUDENT.KURS;
не знаю почему..
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 25.01.2011, 16:37   #4
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Думаю, что как-то так
Код:
select student.kurs, count(*) from student
left join exam_marks on exam_marks.student_id = student.student_id
left join subject on subject.subj_id = exam_marks.subj_id
group_by student.kurs
_Engine_ вне форума Ответить с цитированием
Старый 25.01.2011, 18:01   #5
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

_Engine_, огромное спасибо !)) сейчас попробую))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 25.01.2011, 18:36   #6
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Да запрос работает.....но логика моя неправильна) подсчитывается скорее количество студентов чем количество предметов....
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 25.01.2011, 19:16   #7
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Семестр в вашей БД можно как-то привязать к курсу? Если да, то для решения вашей задачи достаточно будет 1 таблицы SUBJECT
_Engine_ вне форума Ответить с цитированием
Старый 25.01.2011, 19:24   #8
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

самое слово курс присутствует только в таблице студентов...)
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 26.01.2011, 17:01   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
самое слово курс присутствует только в таблице студентов
выскажу своё имхо....
1) я согласен с _Engine_ - если Вам удасться догадаться, как связаны KURS
и SEMESTER - то для решения задачи достаточно одной таблицы SUBJECT

если же этой связи нет (и выявить её по имеющимся данным невозможно), тогда, имхо, стоит попробовать сделать такое допущение - по всем предметам, которые есть на курсе есть сданные экзамены (т.е. для всех предметов без исключения есть записи в таблице EXAM_MARKS (неважно все ли студенты сдавали, или только один ботаник сдал какой-то один предмет). Главное, что если нет записи в таблице экзаменов, значит нет такого предмета на данном курсе!

ну тогда в подзапросе получаем записи из трёх таблиц сгруппировав их по KURS и SUBJ_ID
и потом банально в основном запросе считаем количество по каждому курсу
select KURS, COUNT(*) from (подзапрос) GROUP BY KURS

p.s. а вообще, задача очень плохо формулирована (именно в области описания связей). я бы рекомендовал, если это возможно, уточнить у преподавателя, как связаны курс и учебные дисциплины, читаемые на этом курсе!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.01.2011, 17:19   #10
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Цитата:
сделать такое допущение - по всем предметам, которые есть на курсе есть сданные экзамены
Serge , спасибо за наводку!))
Цитата:
как связаны KURS
и SEMESTER
получается что нельзя никак сгруппировать семестры по два в одном курсе,да?
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL Count() novice2010 Помощь студентам 1 23.09.2010 07:30
Count. Firebird artemavd БД в Delphi 21 12.09.2010 12:00
count(*) as dedyshka PHP 8 28.12.2009 15:53
count(*) antoniosm БД в Delphi 9 12.09.2007 13:06
функция запроса COUNT Таня84 БД в Delphi 1 10.06.2007 15:49