2013-11-27 163 views
0

我有一张名为标记表的表格,我存储了学生的标记。我希望从每个单元考试中取得20%的分数,每周考试中有30%,期末考试中有50%。所有单元考试,每周考试和期末考试的名称都存储在一个名称为Name_of_exam的列名下。我可以用如何在单个mysql select语句中使用Multiple where子句?

SELECT regd, 
     Sum(mark_score)/sum(Full_mark)*20 as scored 
FROM marksheet 
WHERE Name_of_exam='First Unit Exam' 
    OR Name_of_exam='Second Unit Exam' 
    OR Name_of_exam='Third Unit Exam' 
GROUP BY regd; 

但问题是,我不知道我怎么可以拿出大关学生得分的30%:标记的 Where (Name_of_exam='First Weekly Test or Name_of_exam='Second Weekly Test' or Name_of_exam='Third Weekly Test') 和50%的得分Where Name_of_exam='Final Exam'。在同样的select语句中,我必须做多个where子句。请帮忙。我在这里也附上了我如何在Excel表格中进行计算。

Image showing marksheet

回答

1

试试这个:

SELECT names, subjects, 
SUM(
    CASE 
    WHEN name_of_exam = 'First Weekly Test' THEN (score/full_marks)*20 
    WHEN name_of_exam = 'First Unit Exam' THEN (score/full_marks)*30 
    WHEN name_of_exam = 'Final Unit Exam' THEN (score/full_marks)*50 
    END) AS scored 
FROM marksheet 
GROUP BY names, subjects 
+0

谢谢。但我还需要包括第二周测试,第三周测试,第二单元测试和第三单元测试。任何你给我的想法。再次感谢。 –

+0

是的,它可行,但我必须对第一周测试,第二周测试和第三周测试进行总结,并取得20%的分数。这个查询只返回一列评分.. –

+0

所以你不想要一个综合/总分,你想每个学生 - 主题组3分? –

3

不能使用多个WHERE一部分,但总是可以使用逻辑运算符来连接条件。

WHERE会发现评分结果在你的treshholds:

SELECT regd, names, subjects, 
    sum(score) * (CASE WHEN (Name_of_exam='First Weekly Test or Name_of_exam='Second Weekly Test' or Name_of_exam='Third Weekly Test') THEN 0.2 
     WHEN (Name_of_exam='First Unit Exam' or Name_of_exam='Second Unit Exam' OR Name_of_exam='Third Unit Exam') THEN 0.3 
     WHEN (Name_of_exam='Final Exam') THEN 0.5) 
    AS scored 
FROM marksheet 
GROUP BY regd, names, subjects, test_type 
+2

@Kacer,我很欣赏你的工作,但是这并没有解决我的问题。如果你仔细阅读这个问题,你可以看到我想要拿出20%,不少于20,另外我想从第一,第二和第三单元考试总和中拿出30%,当然还有50%考试。请你能写出更清晰的代码。到目前为止,您提供的答案也不是有效的sql语句。 –

相关问题