Команда SQL COUNT - PullRequest
       14

Команда SQL COUNT

1 голос
/ 29 апреля 2011
CREATE TABLE Student_Exam(
  Exam_ID INTEGER,
  S_ID INTEGER,
  Primary Key (Exam_ID, S_ID),
  Foreign Key (Exam_ID) References Exams(Exam_ID),
  Foreign Key (S_ID) References Students(S_ID),
  Pass TEXT
);

CREATE TABLE Students(
  S_ID INTEGER PRIMARY KEY,
  First_Name TEXT,
  Surname TEXT
);

CREATE TABLE Exams(
  Exam_ID INTEGER PRIMARY KEY,
  Date_Taken DATE
);

Как я могу это исправить?

SELECT MAX(Students.S_ID) AS S_ID, **count(Pass="Yes")** AS No_of_Exams_Taken
FROM Student_Exam, Students, Exams
WHERE Students.S_ID=Student_Exam.S_ID And Exams.Exam_ID=Student_Exam.Exam_ID And (Exams.Date_Taken)>=#1/1/2010# And (Exams.Date_Taken)<=#12/31/2010#
GROUP BY Student_Exam.S_ID;

Я бы хотел посчитать количество экзаменов, которые сдал каждый студент? Какой счет должен быть в команде SELECT?

ВЫБЕРИТЕ Student.S_ID, COUNT (*) AS Final_Exam_Level ОТ студента, экзамены, студент_экзамен WHERE (Student.S_ID) = Student_Exam.S_ID И ((Exams.Exam_ID) = Student_Exam.Exam_ID) И (Exams.Date_Taken) <= # 12/31/2010 # GROUP BY Student.S_ID, Student.Course_Level ORDER BY Student.S_ID; </p>

Над правильным запросом

Ответы [ 2 ]

1 голос
/ 30 апреля 2011
select s.s_id as student_id, count(*)
FROM students s
left join student_exam se on s.s_id = se.s_id and se.pass='yes'
left join exam e on se.exam_id = e.exam_id
group by s.s_id

Я бы предложил вам изменить пароль на нетекстовое поле.Если оно будет иметь только «да» и «нет», то оно должно быть логическим.

0 голосов
/ 30 апреля 2011

Эта версия отвечает на конкретный вопрос о том, как считать на основе условия.В качестве бонуса он также предоставит количество сданных экзаменов.

select
   s.s_id as student_id
  ,count(case when se.pass='Yes' then 1 end) as exams_passed
  ,count(*) as exams_taken
from
   Students s
   join Student_Exam se on s.s_id = se.s_id
   join Exam e on se.exam_id = e.exam_id
where
   e.date_taken between #1/1/2010# and #12/31/2010#
group by
   s.s_id

На основе ваших других комментариев версия, избегающая join, будет выглядеть так:более простая версия, которая не так хороша с case:

select
   s.s_id as student_id
  ,count(*) as exams_passed
from
   Students s
  ,Student_Exam se
  ,Exam e
where
   s.s_id = se.s_id
   and se.exam_id = e.exam_id
   and e.date_taken between #1/1/2010# and #12/31/2010#
   and se.pass = 'Yes'
group by
   s.s_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...