按最高分标记过滤学生

时间:2014-12-27 10:52:13

标签: mysql

我有一个mysql表

表名'结果'

Reg.No  SubjectCode  Attempt  Grade  Marks
112108  CMIS 1113    1        D      17
112110  CMIS 1114    1        A      85
112119  CMIS 1114    1        D      18
112108  CMIS 1113    2        D+     25
112110  CMIS 1113    1        D+     25
112107  CMIS 1113    1        B      70
112108  CMIS 1113    3        C      40
112110  CMIS 1113    2        C      40
112119  CMIS 1114    2        C      42
112120  CMIS 1114    1        D      17

这是关于学生的#39;结果。
学生至少需要一个" C"     (标记> 40)通过主题。
直到通过,学生可以拥有     几次尝试。
但从第二次尝试最高等级他们     可以得到的是" C"
因此,那些无法通过该课程的学生     第一次尝试,过去再次尝试,直到他们通过主题     
因此,对于最终结果表,每个科目都将考虑最高结果(最高分由最高分给出)
因此,例如CMIS 1113的最高分112108是40 同样,我想让学生获得ecch科目的成绩(但总是会考虑最大分数) 实际上我的预期结果表应该是这样的

Reg.No  SubjectCode  Attempt  Grade  Marks
112110  CMIS 1114    1        A      85
112107  CMIS 1113    1        B      70
112108  CMIS 1113    3        C      40
112110  CMIS 1113    2        C      40
112119  CMIS 1114    2        C      42
112120  CMIS 1114    1        D      17

那么如何使用sql查询检索这些数据呢?

3 个答案:

答案 0 :(得分:3)

要为每位学生只获得一个值,请按Reg.No和SubjectCode进行分组,然后获取每个主题的最大值。此查询应该有效:

SELECT      
    `Reg.No`,
    `SubjectCode`,
    `Attempt`,
    `Grade`,
    MAX(`marks`) AS marks
FROM        
    `results` 
GROUP BY    
    `Reg.No`, `SubjectCode`  

为了获取所有列,您需要两个查询,这些查询可以与子查询放在一起。它看起来像这样:

SELECT * 
FROM
    (SELECT * 
     FROM `results` 
     ORDER BY `Grade` ASC) AS t
GROUP BY    
    `Reg.No`, `SubjectCode` 
ORDER BY    
    `Grade` ASC

“内部查询”将获取所有结果,并按Grade列从低到高对行进行排序。 “外部查询”不仅仅将它们分组(不使用MAX函数)。这将导致每个分组的最后一行,而不是最大结果(正如我们在“内部查询”中那样排序)。

答案 1 :(得分:1)

使用子查询来确定哪个是最高标记并加入到该标记:

SELECT r.`Reg.No`, r.SubjectCode, MAX(Attempt), r.Grade, r.marks
FROM results r
JOIN (SELECT `Reg.No`, SubjectCode, MAX(marks) AS marks
   FROM results
   GROUP BY 1, 2) m
   ON m.`Reg.No` = r.`Reg.No`
   AND m.SubjectCode = r.SubjectCode
   AND m.marks = r.marks
GROUP BY 1, 2, 4, 5

外部分组是当学生多次为某个主题达到相同标记时打破关系。

答案 2 :(得分:0)

尝试这样做

SELECT * FROM results WHERE marks > 40 Order By Marks Desc

这将列出大于40的结果,并且最高标记将首先显示您也可以使用限制,以便您可以根据需要获取记录