mysql增量变量用例

时间:2013-12-18 13:39:20

标签: mysql case

我有两张表marksexams

marks表中,我有studentidmark1mark2examid - 来自exams的外键,用于不同的考试。< / p>

我想在一个查询中获得不同的学生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;

但是上面的查询未能给出正确的结果。如何修改查询以获得正确的结果?

2 个答案:

答案 0 :(得分:2)

试试这个。您无需使用变量来帮助您。

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)可获得每个学生的失败数

哦,连接会在两个表之间建立更有效的连接:)

答案 1 :(得分:1)

您不需要变量@arrear。您只能使用查询

获取信息

试试这个:

select
    distinct t1.studentid,
    sum(
        case
            when (t1.mark1+t1.mark2) <50 OR t1.mark1 < 30
            then 1
            else 0
        end
    ) as failures
from  marks t1, exams t2
where t1.examid = t2.examid group by t1.studentid;