我有两个表marks
和exams
。
在marks
表中,我具有studentid
,mark1
,mark2
和examid
-来自exams
的外键,用于不同的考试。
我想在一个查询中获得不同的学生ID及其失败次数。
失败的条件是mark1+mark2 <50 or mark1<30
。例如如果学生编号为1的学生在成绩表中有15个条目(15项考试),而同一学生的成绩为6,则该学生不及格,因此我想在两列中获得“ 1”和“ 6”的结果,并且对所有学生都类似。对于这种情况,我使用“ case”写了查询,并在下面给出
select
distinct t1.studentid,
(@arrear:=
case
when (t1.mark1+t1.mark2) <50 OR t1.mark1 < 30
then @arrear+1 else @arrear
end) as failures
from marks t1, exams t2,
(select @arrear := 0) r
where t1.examid = t2.examid group by t1.studentid;
但是上述查询未能给出正确的结果。如何修改查询以获得正确的结果?
最佳答案
尝试这个。您不需要使用变量来帮助您。
select
m.studentid,
sum(case when m.mark1 + m.mark2 < 50 or m.mark1 < 30 then 1 else 0 end) as failures
from
marks m inner join exams e
on
m.examid = e.examid
group by
m.studentid
case
语句计算出结果是否失败,如果失败则返回1,如果没有失败则返回0。将结果求和(group
除以studentid
)可得出每个学生人数失败的次数哦,连接使您的两个表之间的连接更有效:)