我要在这里存档的是,仅选择学生表现最佳的科目,包括必修科目(mustSubjectId
),然后根据成绩范围的总和输出结果。grade
越高,点add sum(marks)
越低。
输入参数示例:
$subjectlimit = '3'; // total subjects a student should pass including mandatory subject to qualify
$idexam = '1'; // targeted examination id
$mustSubjectId = '201'; // mandatory subjectid
$studentId = '1'; // a student to get
表检查
候选人| subject_id |得分了
------------------------------------
1 | 200 | 30
1 | 201 | 60(注:必修课)
1 | 202 | 80
1 | 204 | 90
1 | 203 | 50
1 | 205 | 54
1 | 209 | 37
8 | 200 | 68
2 | 200 | 20
1 | 206 | 50
表格范例
idexam |商标|年级
---------------------------------------
1 | 30 | 9
1 | 45 | 8
1 | 65 | 7
1 | 70 | 6
1 | 80 | 5
1 | 85 | 4
1 | 90 | 3
1 | 95 | 2
1 | 100 | 1个
极限输出3
候选人| idexam | subject_id |年级
1 | 1 | 204 | 3
1 | 1 | 202 | 5
1 | 1 | 201 | 8
最终输出
候选人| idexam |点数
1 | 1 | 16
我希望您能提供帮助,因为我对复杂的MySql查询不满意
编辑
我在评论中被JNevill误认为,桌检确实
没有idexam,也没有关系。选择
应该是这样的
从考试中选择最高分数,包括必修科目分数
其中idcandidate ='1'限制3,然后检查所选分数等级
在idexam =“ 1”的示例中,将找到的成绩
应计算为分数总和(等级)作为分数
查询目的
有一张纸显示了该课程所有科目的成绩
学生,然后在表格的某行上显示点
学生将修读3门科目,包括必修科目。为一个
学生通过考试他/她应该通过三门科目
包括必修科目。
注意
正在运行的sql报告无法识别选择的顶部,我也尝试了小提琴,小提琴也无法识别它。
select top 3 score from examinations where idcandidate = ‘1’
最佳答案
我建议类似的东西(适当地用参数替换值):
这为您提供了不是您“必修课”的前2个最高分数:
select TOP 2 en.idcandidate, en.idexam, en.subject_id, en.grade
FROM examinations en
INNER JOIN examrules er ON en.idexam = er.idexam
where en.subject <> $mustSubjectId
order by en.score desc
这为您提供了“必修课”:
select en.idcandidate, en.idexam, en.subject_id, en.grade
FROM examinations en
INNER JOIN examrules er ON en.idexam = er.idexam
where en.subject = $mustSubjectId
这为您提供了“限制为3的输出”(只需将一个附加到另一个):
select TOP 2 en.idcandidate, en.idexam, en.subject_id, en.grade
FROM examinations en
INNER JOIN examrules er ON en.idexam = er.idexam
where en.subject <> $mustSubjectId
order by en.score desc
UNION ALL
select en.idcandidate, en.idexam, en.subject_id, en.grade
FROM examinations en
INNER JOIN examrules er ON en.idexam = er.idexam
where en.subject = $mustSubjectId
最后,您将成绩加起来:
select idcandidate, idexam, sum(en.grade) as points FROM
(
select TOP 2 en.idcandidate, en.idexam, en.subject_id, en.grade
FROM examinations en
INNER JOIN examrules er ON en.idexam = er.idexam
where en.subject <> $mustSubjectId
order by en.score desc
UNION ALL
select en.idcandidate, en.idexam, en.subject_id, en.grade
FROM examinations en
INNER JOIN examrules er ON en.idexam = er.idexam
where en.subject = $mustSubjectId
) a group by a.idcandidate, a.idexam
我还没有机会进行测试,但希望能有所帮助!