Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何找到从第一次参加考试起在所有考试中取得满分的学生人数?_Sql_Sql Server 2008 R2 - Fatal编程技术网

Sql 如何找到从第一次参加考试起在所有考试中取得满分的学生人数?

Sql 如何找到从第一次参加考试起在所有考试中取得满分的学生人数?,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我有数据库设计的以下部分,我需要找到从第一次参加考试起在弹出式考试中获得满分的学生名单。具体来说,我们假设有三名学生在不同的日期(或天数)参加了两次第一次弹出式考试(Exam101): 参加所有考试并在第一次考试中获得满分的学生总数应为:2 我对数据库的设计是: Students Table: StudentNo, Name, Year Exams Table: ExamID, Title, ExamDate StudentsExams Table: ID, ExamID, StudentNo,

我有数据库设计的以下部分,我需要找到从第一次参加考试起在弹出式考试中获得满分的学生名单。具体来说,我们假设有三名学生在不同的日期(或天数)参加了两次第一次弹出式考试(Exam101):

参加所有考试并在第一次考试中获得满分的学生总数应为:2

我对数据库的设计是:

Students Table: StudentNo, Name, Year
Exams Table: ExamID, Title, ExamDate
StudentsExams Table: ID, ExamID, StudentNo, Score, CompletedON 

那么谁能找到这个结果呢?

如果满分总是10分(对于所有考试),您可以使用:

select s.studentno,
       s.name,
       s.year,
       se.examid,
       e.title,
       se.score,
       se.completedon
  from students s
  join studentsexams se
    on s.studentno = se.studentno
  join exams e
    on se.examid = e.examid
  join (select studentno, examid, min(completedon) as first_completed
          from studentsexams
         group by studentno, examid) v
    on se.examid = v.examid
   and se.studentno = v.studentno
   and se.completedon = v.first_completed
 where se.score = 10
如果“满分”的构成因考试而异,我们需要知道如何确定每次考试的最高分数。根据您发布的内容,您的考试表似乎没有“最高分数”字段。

with cte_num
as
(
select name,ExamID,count(CompletedON)
from Students s join StudentsExams se
on s.StudentNo=se.StudentNo
join Exams e
on e.ExamID=se.ExamID
where score=10
having count(CompletedON)=1)

select count * from cte_num

我已经编辑了你的标题。请看“,”其中的共识是“不,他们不应该”。什么是“满分”?不管考试如何,总是10分吗?考试永远不会有15分、20分等潜在分数?
with cte_num
as
(
select name,ExamID,count(CompletedON)
from Students s join StudentsExams se
on s.StudentNo=se.StudentNo
join Exams e
on e.ExamID=se.ExamID
where score=10
having count(CompletedON)=1)

select count * from cte_num