我想在此处存档的原因是,只选择学生表现最佳的科目,包括必修科目(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
表格考试
idcandidate | subject_id | score ------------------------------------ 1 | 200 | 30 1 | 201 | 60 (note: a must subject) 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 | marks | grade --------------------------------------- 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的输出
Idcandidate| idexam | subject_id| grade 1 | 1 | 204 | 3 1 | 1 | 202 | 5 1 | 1 | 201 | 8
最终输出
Idcandidate| idexam | points 1 | 1 | 16
我希望您可以提供帮助,因为我对复杂的MySql查询不了解
修改
我在评论中被JNevill弄错了,表格检查确实如此 没有idexam,也没有与examrules的关系。选择 应该像
选择最高分,包括考试的必修科目分数 其中idcandidate ='1'限制3然后检查所选的分数等级 在例如idexam ='1'的考试中,将找到等级 应计算为点数(等级)为点
查询的目标
有一张表显示班级所有科目的成绩 学生,然后在某一行,表格假设显示点 学生上3门科目,包括必修科目。为一个 学生通过考试他/她应该通过三个科目 包括强制性主题。
注意
正在运行的sql是报告不识别选择顶部而我也尝试小提琴,小提琴也不认识它。 select top 3 score from examinations where idcandidate = ‘1’
答案 0 :(得分:0)
我建议像(适当地用参数替换值):
这为您提供了不是“必须受试者”的前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
我没有机会测试这个,但希望有所帮助!