2017-07-30 58 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);