Sql 如何找到从第一次参加考试起在所有考试中取得满分的学生人数?
我有数据库设计的以下部分,我需要找到从第一次参加考试起在弹出式考试中获得满分的学生名单。具体来说,我们假设有三名学生在不同的日期(或天数)参加了两次第一次弹出式考试(Exam101): 参加所有考试并在第一次考试中获得满分的学生总数应为:2 我对数据库的设计是: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,
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