我要在这里存档的是,仅选择学生表现最佳的科目,包括必修科目(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


我还没有机会进行测试,但希望能有所帮助!

09-17 17:13