我有两个表marksexams

marks表中,我具有studentidmark1mark2examid-来自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)可得出每个学生人数失败的次数

哦,连接使您的两个表之间的连接更有效:)

10-08 02:23