2017-07-30 50 views
1

我有一个表:显示重复的最大值

+----------------+----------------+------------------+-------+ 
| Student_Id | Student_Name | Assessment_Type | Mark | 
+----------------+----------------+------------------+-------+ 
| 300   |  John  | Assignment  | 1 | 
| 200   |  Liz  | Final   | 2 | 
| 300   |  John  | Mid-term  | 3 | 
| 100   |  Sue  | Mid-term  | 4 | 
| 200   |  Liz  | Project  | 5 | 
| 300   |  John  | Assignment  | 6 | 
| 200   |  Liz  | Final   | 7 | 
| 300   |  John  | Mid-term  | 8 | 
| 100   |  Sue  | Mid-term  | 8 | 
| 200   |  Liz  | Project  | 9 | 
+----------------+----------------+------------------+-------+ 

我想找到Assessment_Type分组的最大标志,如果有重复的,同时显示,所以在这种情况下:

+----------------+----------------+------------------+-------+ 
| Student_Id | Student_Name | Assessment_Type | Mark | 
+----------------+----------------+------------------+-------+ 
| 300   |  John  | Assignment  | 6 | 
| 200   |  Liz  | Final   | 7 | 
| 300   |  John  | Mid-term  | 8 | 
| 100   |  Sue  | Mid-term  | 8 | 
| 200   |  Liz  | Project  | 9 | 
+----------------+----------------+------------------+-------+ 

我只显示其中之一:

SELECT Student_Id, Student_Name, Assessment_Type, max(mark) FROM STUDENT_ASSESSMENT group by Student_Id, Assessment_Type; 

编辑:增加了更多的细节问题。

+2

'GROUP BY Student_Id' – shmosel

+0

对不起关于这个问题的困惑,在我原来的问题,我通过Assessment_Type应该组为好,我现在编辑的问题。 – gptt916

回答

1

你可以找到最大的标记在每个评估类型,然后比较最大值(马克)和每行的评估类型。

select * from STUDENTS_ASSESSMENT where (Assessment_Type,marks) in 
((select Assessment_Type,max(marks) from STUDENTS_ASSESSMENT groupby Assessment_Type)); 
+0

'Assessment_Type'和'Marks'之间的逗号错误 – gptt916

+1

按预期工作,很棒,谢谢! – gptt916

0

你可以找到Mark列的最大值,然后选择行认为Mark值等于该值:

SELECT 
    Student_Id, Student_Name, Assessment_Type, Mark 
FROM 
    STUDENT_ASSESSMENT FullSet 
JOIN 
    (SELECT MAX(Mark) AS Mark FROM STUDENT_ASSESSMENT) MaxMark 
USING (Mark);